4

我正在尝试创建一个小按钮,该按钮通过绑定显示自定义类的实际 Count 属性。这是我的自定义类代码片段:

public sealed class Counter : IEnumerable<MyClass>
{
    private List<MyClass> m_Collection;

    public Int32 Count
    {
        get { return m_Collection.Count; }
    }

    ...

这是我的窗口代码片段:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        m_Counter = new Counter();
    }

这是我的 MainWindow 的 XAML 片段:

<Window ... DataContext="{Binding RelativeSource={RelativeSource Self}}">
...
   <Button Content="{Binding Path=m_Counter.Count}" Height="40" Width="40"/>

嗯……我做错了什么?

4

1 回答 1

4

您应该在 Counter 上实现INotifyPropertyChangedPropertyChanged并在修改时使用Count作为属性名称m_Collection

就像是

public sealed class Counter : IEnumerable<MyClass> , INotifyPropertyChanged
{
    private List<MyClass> m_Collection;

    public Int32 Count
    {
        get { return m_Collection.Count; }
    }

    public void Add(MyClass item)
    {
        m_Collection.Add(item);
        if (PropertyChanged != null)
            PropertyChanged(null, new PropertyChangedEventArgs("Count"));
    }

public event PropertyChangedEventHandler PropertyChanged;

您可能必须为所有 List 突变事件触发它。

更简单的事情是做类似的事情

 public sealed class Counter2 : IEnumerable<MyClass>
    {
        private ObservableCollection<MyClass> m_Collection = new ObservableCollection<MyClass>();

        public ObservableCollection<MyClass> Collection
        {
            get
            {
                return m_Collection;
            }
        }

    }

并在 XAML 中绑定到Collection.Count

于 2013-03-25T23:38:33.263 回答