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();
    }

これが私のメインウィンドウのXAMLスニペットです:

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

うーん...何が悪いの?

4

1 に答える 1

4

カウンターにINotifyPropertyChangedを実装し、プロパティ名としてCountPropertyChangedを使用してレイズする必要があります。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;

すべてのリストミューテーションイベントに対して起動する必要がある場合があります。

より簡単なことは、次のようなことをすることです

 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 に答える