【问题标题】:Implementing CollectionChanged Handler in XAML with WPF使用 WPF 在 XAML 中实现 CollectionChanged 处理程序
【发布时间】:2013-01-18 09:34:55
【问题描述】:

我使用位于 stackoverflow:event-fired-when-item-is-added-to-listview 的解决方案来利用 CodeBehind 中的接口 INotifyCollectionChanged。有没有办法在 XAML 中添加这个 EventHandler?

本质上,我希望在 XML 中定义这一行:

((INotifyCollectionChanged)lbFiles.Items).CollectionChanged += lbFiles_SelectionChanged; 

【问题讨论】:

  • 您是否在实现自己的 GUI 元素?通常,您将元素的 ItemsSource 属性绑定到可观察的集合,然后事情就会亮起来。

标签: c# wpf events user-interface event-handling


【解决方案1】:

您应该只是在绑定到您的 ListBox/ListView 等的集合上创建 CollectionChanged 事件,从后面的代码中直接访问控件不是 WPF 的处理方式。

例子:

Xaml:

<Window x:Class="WpfApplication8.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="340" Width="480" Name="UI" >
    <Grid DataContext="{Binding ElementName=UI}">
        <ListBox ItemsSource="{Binding MyProperty}" />
    </Grid>
</Window>

代码:

public partial class MainWindow : Window
{
    private ObservableCollection<string> _myProperty = new ObservableCollection<string>();

    public MainWindow()
    {
        InitializeComponent();
        MyProperty.CollectionChanged += MyProperty_CollectionChanged;
    }

    public ObservableCollection<string> MyProperty
    {
        get { return _myProperty; }
        set { _myProperty = value; }
    }

    void MyProperty_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        // Collection Changed
    }
}

【讨论】:

  • 当我学习正确的语法时,有没有办法以任何方式解决绑定问题?我已经修改了我的代码,但我假设事件处理程序正在自动添加,因为 CollectionChanged 事件不再触发。
  • 在这个例子中我有什么遗漏吗?我知道绑定必须正常工作,因为我将 Observable 集合上的 getter 更改为静态字符串列表,并且事件处理程序现在正在触发。但是 ListBox 元素没有更新。当我调试时,ItemsSource 属性不等于 UI 显示的内容,即:ListBox 始终为空白,即使 ItemsSource 定义的属性中有 >= 1 个元素,我保证已正确绑定。
  • 我在这里发布了一个更复杂的问题:ObservableCollection<T> WPF Binding Display Not Updating
猜你喜欢
  • 2011-10-19
  • 1970-01-01
  • 2018-07-13
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2011-06-15
  • 2016-01-10
  • 1970-01-01
相关资源
最近更新 更多