0

我有一个对象,我将其作为属性传递给我的用户控件。然后循环遍历对象属性并在运行时根据订单日在不同的选项卡中创建控件。请仔细阅读附图以更好地理解。

它工作正常,但这是 WINFORM 类型,是否有可能在运行时使用 WPF 绑定、依赖属性或类似的东西创建控件。

在此处输入图像描述

在此处输入图像描述

谢谢

4

1 回答 1

0

是否有可能在运行时使用 WPF 绑定创建控件

对的,这是可能的。这就是数据模板的用途。基本规则是:不要创建控件,创建数据并显示模板,它定义了数据应该如何表示:

public class ComponentViewModel : ViewModel /* ViewModel is a basic implementation of INotifyPropertyChanged interface */
{
    public ComponentViewModel()
    {
        this.Items = new ObservableCollection<ItemViewModel>
        {
            new ItemViewModel { IsActive = true, DateTime = DateTime.Now, Name = "Lemons" },
            new ItemViewModel { IsActive = true, DateTime = DateTime.Now, Name = "Melons" },
            new ItemViewModel { IsActive = true, DateTime = DateTime.Now, Name = "Apples" },
        };
    }

    public ObservableCollection<ItemViewModel> Items { get; private set; }
}

public class ItemViewModel : ViewModel
{
    public bool IsActive
    {
        get { return isActive; }
        set
        {
            if (isActive != value)
            {
                isActive = value;
                OnPropertyChanged("IsActive");
            }
        }
    }
    private bool isActive;

    public string Name
    {
        get { return name; }
        set
        {
            if (name != value)
            {
                name = value;
                OnPropertyChanged("Name");
            }
        }
    }
    private string name;

    public DateTime DateTime
    {
        get { return dateTime; }
        set
        {
            if (dateTime != value)
            {
                dateTime = value;
                OnPropertyChanged("DateTime");
            }
        }
    }
    private DateTime dateTime;
}

代码隐藏:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ComponentViewModel();
    }
}

XAML:

                <CheckBox Grid.Column="0" IsChecked="{Binding IsActive}" Content="{Binding Name}"/>
                <TextBox Grid.Column="1" Text="{Binding DateTime}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

于 2013-01-17T07:05:30.020 回答