我已经发布了一个上一个问题,但是没有什么帮助,所以我尝试开始编码并自己查找更多内容并且我坚持使用某些代码。我正在尝试关注MVVM
我创建了一个名为Standard
的类,如下所示:
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; }
}
}
}
然后我创建了ViewModel
类,如下所示:
namespace MVVModel
{
class ViewModel
{
ObservableCollection<Standard> _title = new ObservableCollection<Standard>();
ObservableCollection<Standard> _question = new ObservableCollection<Standard>();
public ViewModel()
{
}
public ObservableCollection<Standard> Title
{
get
{
return _title;
}
set
{
_title = value;
}
}
public ObservableCollection<Standard> Question
{
get
{
return _question;
}
set
{
_question = value;
}
}
}
}
这是我的XAML:
<Grid>
<Button x:Name="btnTitle" Content="Title" HorizontalAlignment="Left" Margin="691,22,0,0" VerticalAlignment="Top" Width="75"/>
<Button x:Name="btnQuestion" Content="Question" HorizontalAlignment="Left" Margin="797,22,0,0" VerticalAlignment="Top" Width="75" Command="{Binding AddTitle}"/>
<ItemsControl ItemsSource="{Binding Question}" Margin="0,86,0,0">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
我只想动态创建一个文本框,但没有显示任何帮助?
答案 0 :(得分:1)
我在之前的回答中提到过实现INotifyPropertyChanged。
为什么你再次需要在viewModel中收集问题和标题,这已经存在于Standard类中。
您需要在主ViewModel中使用Standard类的集合。如果我理解正确的话,这就是我从你的问题中得到的结果。
以下是INotifyPropertyChanged的实现
public class Standard : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
// Create the OnPropertyChanged method to raise the event
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);
}
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);
}
}
}
答案 1 :(得分:0)
您必须按照几个步骤完成此任务。
首先,您需要将Standard
的集合绑定到Grid
,而不是Question
。
其次,您需要将上一个类的属性绑定到文本框。
例如:
<DataTemplate>
<TextBox Text="{Binding Question"} />
</DataTemplate>
编辑:
我想提一下这篇文章来帮助你:
http://www.codeproject.com/Articles/165368/WPF-MVVM-Quick-Start-Tutorial