C# 在MVVM中动态创建控件

C# 在MVVM中动态创建控件,c#,wpf,mvvm,data-binding,datatemplate,C#,Wpf,Mvvm,Data Binding,Datatemplate,我是WPF的新手。我试图在MVVM中动态创建控件,但控件不会在视图中呈现。我想在视图上创建一些标签和文本框 下面是我的代码: 模型代码 public class MyModel { public string KeyName { get; set; } public string KeyValue { get; set; } } 模型视图代码 public class MyView

我是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);

    }
}
公共类MyViewModel
{
私有ObservableCollection属性列表=新ObservableCollection();
公共CustomWriteServiceModel()
{
GetMyProperties()
}
公共可观测集合属性
{
获取{return propertiesList;}
}
私有void GetMyProperties()
{
MyModel m=新的MyModel();
m、 KeyName=“测试密钥”;
m、 KeyValue=“测试值”;
MyModel.Add(m);
}
}
视图代码(即用户控件)


当视图呈现时,我只能看到空文本框。我不明白出了什么问题。

根据我的评论:

DataTemplate
接收单个项作为其
DataContext
,因此您只需要在绑定路径中包含项级属性名称,如:

<DataTemplate DataType="{x:Type cw:MyModel}">
    <StackPanel Orientation="Horizontal">
         <Label Margin="10" Content="{Binding KeyName}"></Label>
         <TextBox Margin="10" Text="{Binding KeyValue}" Width="250"></TextBox>
    </StackPanel>
</DataTemplate>

根据我的评论:

DataTemplate
接收单个项作为其
DataContext
,因此您只需要在绑定路径中包含项级属性名称,如:

<DataTemplate DataType="{x:Type cw:MyModel}">
    <StackPanel Orientation="Horizontal">
         <Label Margin="10" Content="{Binding KeyName}"></Label>
         <TextBox Margin="10" Text="{Binding KeyValue}" Width="250"></TextBox>
    </StackPanel>
</DataTemplate>


您不在
属性列表中添加任何内容。
MyModel.add(m)水。使用调试器单步执行代码时提供帮助。已在propertiesList中添加项,但仍然无效。问题仍然是一样的。我觉得只有数据模板存在一些问题。我在PropertiesList中又添加了一项。在这种情况下,我可以看到两个空文本框。您应该将绑定更改为简单的
{Binding KeyName}
,而不指定属性。因为它在DataTemplate中,所以各个VM已经是DataContext。您不需要在
propertiesList
集合中添加任何内容水。使用调试器单步执行代码时提供帮助。已在propertiesList中添加项,但仍然无效。问题仍然是一样的。我觉得只有数据模板存在一些问题。我在PropertiesList中又添加了一项。在这种情况下,我可以看到两个空文本框。您应该将绑定更改为简单的
{Binding KeyName}
,而不指定属性。由于它位于DataTemplate中,各个VM已经是DataContext。您可以在输出窗口中识别此类绑定错误。此类错误类似于
System.Windows.Data错误:40:BindingExpression路径错误:
您可以在输出窗口中识别此类绑定错误。这些错误看起来像
System.Windows.Data错误:40:BindingExpression路径错误: