问题:数据绑定 ItemsControl(DataTemplate)不更新/仅接收程序启动时的值
答案:
在 C#/.NET 框架中,通过 ItemsControl(DataTemplate) 进行数据绑定,可以实现将数据与视图逻辑分离。但是,当仅希望在程序启动时接收数据,而在后续过程中不更新数据时,需要使用弱数据绑定(Weak Data Binding)。
弱数据绑定通过使用 Binding
属性,将数据与视图控件进行关联。当数据变化时,数据绑定将自动更新视图。但如果希望建立仅在启动时接收数据的绑定,可以使用以下代码示例:
// 创建一个存储数据的集合
private ObservableCollection<string> _data = new ObservableCollection<string>();
// 初始化数据绑定
private void InitializeDataBinding()
{
// 将数据与视图进行绑定
ItemsControl.ItemsSource = _data;
// 创建一个弱数据绑定,仅当数据变化时更新视图
Binding binding = new Binding();
binding.Mode = BindingMode.OneWay;
binding.Source = _data;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
_data.SetBinding(ItemsControl.ItemsSourceProperty, binding);
}
在这个示例中,我们创建了一个 ObservableCollection 来存储数据,然后通过弱数据绑定将其与视图进行关联。绑定仅当数据源本身发生变化时更新视图。
注意:若不设置 UpdateSourceTrigger 属性,默认情况下,弱数据绑定在源发生变化时立即更新视图。通过设置 UpdateSourceTrigger 为 PropertyChanged
,可以确保仅在数据源属性发生变化时更新视图。
领取专属 10元无门槛券
手把手带您无忧上云