我有一个对象,我正在通过我的用户控件作为属性。然后循环遍历对象属性,并根据订单日在运行时在不同的选项卡中创建控件。 请仔细阅读附图,以便更好地理解。
它的工作正常,但这是WINFORM类型,是否有可能在运行时使用WPF绑定,依赖属性或类似的东西创建控件。
由于
答案 0 :(得分: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>