2014-01-06 74 views
3

我可以在C#代碼中動態創建文本框,這是我已經實現的,但是人們一直在說我需要遵循MVVM模式,我研究它並且看起來非常困難,而且我無法適應它。動態創建文本框MVVM?

我需要動態創建文本框,將文本框中的信息保存到SQL中,然後才能重新打開它。

這裏是一個圖片說明什麼,我需要做的:

enter image description here

這是可以做到不使用MVVM模式?

只需要一個推動開始的abit和我如何做到這一點的解釋,我不希望被提供所有的代碼。

EDIT1:

我不知道這是否正確。

我創建了一個名爲「標準」類,它看起來像這樣:

namespace MVVModel 
{ 
public class Standard 
{ 

    string _title; 
    string _question; 



    public string Title 
    { 
     get { return _title; } 
     set { _title = value; } 
    } 

    public string Question 
    { 
     get { return _question; } 
     set { _question = value; } 
    } 
} 
} 

現在我要創建一個視圖模型?這需要什麼?

+0

我有點理解爲什麼'TextBox'應該動態創建?我瞭解通常的調查問卷,存儲在數據庫中的數據。 –

+0

@AnatoliyNikolaev因爲用戶可以添加儘可能多的標題和問題,他們不應該被限制,所以我不能只是把文本框放在那裏。 – user3157821

回答

4

您可以使用

<ItemsControl ItemsSource="{Binding StandardCollection}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate DataType="{x:Type Standard}"> 
      <Grid> 
       <TextBox Text={Binding Title} /> 
       <ItemsControl ItemsSource="{Binding Questions}"> 
        <ItemsControl.ItemTemplate> 
         <DataTemplate> 
          <TextBox Text={Binding} /> 
         </DataTemplate> 
        </ItemsControl.ItemTemplate> 
       </ItemsControl> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

這是綁定到任何收集在你的視圖模型。

您可以根據需要添加儘可能多的項目。

更新:

public class Standard 
{ 
    string _title; 
    ObservableCollection<string> _questions;   

    public string Title 
    { 
     get { return _title; } 
     set { 
      _title = value; 
      NotifyOfPropertyChanged(()=>Title); 
     } 
    } 

    public ObservableCollection<string> Questions 
    { 
     get { return _questions; } 
     set { 
      _questions = value; 
      NotifyOfPropertyChanged(()=>Questions); 
     } 
    } 
} 

public class StandardViewModel 
{ 
    private ObservableCollection<Standard> _standardCollection; 
    public ObservableCollection<Standard> StandardCollection{ 
     get 
     { 
      return _standardCollection;    
     } 
     set{ 
      _standardCollection = value; 
      NotifyOfPropertyChanged(()=>StandardCollection); 
     } 
    } 
} 

看你的圖1:它好像你可能有每個標題多個問題。所以這裏是解決方案。

是的,您將需要Standard類來簡化它。

對不起,我現在沒有Visual Studio,我只是在記事本中寫了這段代碼,並粘貼在這裏。不確定錯誤。但只是高層次的想法。

+0

那麼這可以讓我創建儘可能多的文本框?如果是這樣的話......我如何定義標題或問題按鈕點擊的位置。 – user3157821

+0

@ user3157821通過綁定您需要定義一個對象,其中包含您的TextBox需要的所有信息並綁定每個屬性 – WiiMaxx

+0

@WiiMaxx從我編輯的問題,這將在'Standard'類或'ViewModel'類I'即將創建? +我需要那個標準課程嗎? – user3157821