在MVVM中动态创建控件 [英] Dynamically Create Controls in MVVM

查看:128
本文介绍了在MVVM中动态创建控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对WPF很陌生.我正在尝试在MVVM中动态创建控件,但是控件未在视图上呈现.我希望在视图上创建一些标签和文本框.

I am pretty new to WPF. I am trying to create controls dynamically in MVVM but controls are not rendered on view. I want some number of label and textbox to be created on view.

下面是我的代码:

型号代码

public class MyModel
{
    public string KeyName
    {
        get;
        set;
    }

    public string KeyValue
    {
        get;
        set;
    }
}

ModelView代码

ModelView Code

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

    }
}

查看代码(这是用户控件)

View Code(Which is user control)

<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>

渲染视图时,我只能看到空的文本框.我不明白怎么了..?

When view renders, I can only see empty textbox. I cannot understand what is wrong..?

推荐答案

根据我的评论:

DataTemplate 接收一个单独的项目作为其 DataContext ,因此您只需要在诸如以下的绑定路径中包括项目级别的属性名称:

The DataTemplate receives an individual item as its DataContext, therefore you only need to include item level property names within your binding paths like:

<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>

这篇关于在MVVM中动态创建控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆