【问题标题】:WPF UserControl Populate ControlsWPF UserControl 填充控件
【发布时间】:2013-11-15 08:48:04
【问题描述】:

控件(组合、下拉菜单)应在何时(什么事件)填充到 WPF 用户控件中?

目前我正在使用 UserControl_Loaded,但这会触发不止一次,并且在开发机器上会产生不一致的结果。

public UserControl_Load(x, x)
{
   if(!this.Loaded)
   {
     //populate controls here
   } 
}

如果这是最佳实践,那么我将尝试解决该问题;但我更感兴趣的是何时(什么事件)最适合用于填充控件?

谢谢

鉴于 Sheridan 的回答,我为那些可能正在寻找有关如何在 WPF 中正确进行数据绑定 (Blog) 的精彩教程的人找到了这篇精彩的博客文章

【问题讨论】:

  • 让 WPF 决定。为您的 UserControl 创建一个视图模型并将子控件绑定到视图模型属性。执行绑定时将填充控件。
  • 最佳实践是@Clemens 上面写的,但您的方法也应该有效。
  • 不要在 WPF 的过程代码中操作 UI 元素。这就是 XAML 的用途。创建一个合适的 ViewModel 并使用 DataBinding。

标签: c# wpf wpf-controls


【解决方案1】:

与其处理事件来填充控件,不如尝试数据绑定方式:

首先在实现INotifyPropertyChanged interface的类(视图模型)中创建一个集合属性:

// You need to implement the `INotifyPropertyChanged` interface properly here
public ObservableCollection<YourDataType> Items { get; set; }

然后您可以从构造函数中调用的代码或Command 处理程序中填充它以响应某些 UI 操作:

Items = GetSomeItems();

现在,如果您为此属性定义了Binding 到 UI 集合控件,则 UI 将自动更新:

<ListBox ItemsSource="{Binding Items}">
    ...
</ListBox>

只要将视图的DataContext 属性设置为视图模型的实例:

DataContext = new SomeViewModel();

最后,我建议您查看 MSDN 上的 Data Binding Overview 页面以获取更多信息。

【讨论】:

  • 谢谢 - 正是我想要的 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
  • 2011-03-23
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多