我是新來的MVVM模式,事情非常緩慢地向我走來,我希望能夠點擊我的窗體上的按鈕,然後動態地在運行時創建一個文本框。我有一個「添加標題」和「添加問題」,它們都添加了文本框,但位於不同的位置,您可以在一個標題下添加許多問題。我創建了一個名爲Standard
類該類它擁有:綁定ICommand到按鈕?
public class Standard
{
string _title;
ObservableCollection<string> _questions;
public event PropertyChangedEventHandler PropertyChanged;
#region NofiftyPropChnage
protected void NotifyOfPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
protected void NotifyOfPropertyChanged<TProperty>(Expression<Func<TProperty>> property)
{
NotifyOfPropertyChanged(property.GetMemberInfo().Name);
}
#endregion
#region Properties
public string Title
{
get { return _title; }
set
{
_title = value;
NotifyOfPropertyChanged(() => Title);
}
}
public ObservableCollection<string> Questions
{
get { return _questions; }
set
{
_questions = value;
NotifyOfPropertyChanged(() => Questions);
}
}
#endregion
}
此類包含一個Title屬性,也問題財產清單,因爲你可以在一個標題添加問題。
我也有一個ViewModel
類持有:
class ViewModel :INotifyPropertyChanged
{
#region NotifyPropertyChange
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyOfPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
protected void NotifyOfPropertyChanged<TProperty>(Expression<Func<TProperty>> property)
{
NotifyOfPropertyChanged(property.GetMemberInfo().Name);
}
#endregion
private ObservableCollection<Standard> _standardCollection;
public ObservableCollection<Standard> StandardCollection
{
get
{
return _standardCollection;
}
set
{
_standardCollection = value;
NotifyOfPropertyChanged(() => StandardCollection);
}
}
}
此類包含的標準列表,一個標準是,當你點擊在做文本框中的文本框和信息保存。它保存爲Standard
最後我的XAML代碼:
<Grid>
<button Content="Add Title"/>
<button Content="Add Question"/>
<StackPanel>
<ItemsControl ItemsSource="{Binding StandardCollection}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type local:Standard}">
<Grid>
<TextBox Text="{Binding Title}"/>
<ItemsControl ItemsSource="{Binding Questions}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Questions}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
一切運行並沒有錯誤,但是當我點擊「添加標題」或「添加問題」沒有出現文本框,任何幫助嗎?
非常詳細的答案!謝謝。首先,當我點擊添加問題時,我想要出現的是一個'文本框'不寫。其次,當我點擊「添加問題」時,它會出現在頁面的最底部,而不是在Stackpanel的頂部? – user3157821
我更新了XAML以包含帶有EditBox的模板。您仍然需要收集字符串,因爲列表框中的每個元素都需要集合中的相應元素,如果您不想顯示任何文本,則只需用空字符串替換「new item」即可。不知道是什麼原因導致你的底頁對齊,你把這個XAML放在其他可能導致它的東西里面嗎?試着讓它成爲窗口中唯一的東西。 –
感謝您的幫助和代碼,一切正常,我想出瞭如何移動文本框。正確答案。 – user3157821