【发布时间】:2016-11-17 15:41:21
【问题描述】:
我对 WPF 很陌生。我正在尝试在 MVVM 中动态创建控件,但控件未呈现在视图中。我希望在视图中创建一些标签和文本框。
下面是我的代码:
型号代码
public class MyModel
{
public string KeyName
{
get;
set;
}
public string KeyValue
{
get;
set;
}
}
模型查看代码
public class MyViewModel
{
private ObservableCollection<MyModel> propertiesList = new ObservableCollection<MyModel>();
public CustomWriterViewModel()
{
GetMyProperties()
}
public ObservableCollection<MyModel> Properties
{
get { return propertiesList; }
}
private void GetMyProperties()
{
MyModel m = new MyModel();
m.KeyName = "Test Key";
m.KeyValue = "Test Value";
MyModel.Add(m);
}
}
查看代码(即用户控制)
<Grid>
<ItemsControl ItemsSource="{Binding Properties}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type cw:MyModel}">
<StackPanel Orientation="Horizontal">
<Label Margin="10" Content="{Binding Properties.KeyName}"></Label>
<TextBox Margin="10" Text="{Binding Properties.KeyValue}" Width="250"></TextBox>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
当视图呈现时,我只能看到空文本框。我不明白出了什么问题..?
【问题讨论】:
-
您没有在
propertiesList集合中添加任何内容。 -
MyModel.Add(m);wat。在您使用调试器单步执行代码时提供帮助。 msdn.microsoft.com/en-us/library/sc65sadd.aspx -
在 propertiesList 中添加了项目,但仍然没有效果。问题还是一样。
-
我觉得只有数据模板有问题。我在 ProperiesList 中又添加了一项。在这种情况下,我可以看到两个空文本框。
-
您应该将绑定更改为简单的
{Binding KeyName}而不指定属性。由于它在 DataTemplate 中,因此各个 VM 已经是 DataContext。
标签: c# wpf mvvm data-binding datatemplate