2013-03-25 1 views
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

당신은 카운터에 INotifyPropertyChanged를 구현하고 당신은 모든 목록 돌연변이 이벤트를 해고해야 할 수도 있습니다 당신이

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; 

같은 m_Collection

뭔가를 수정할 때 속성 이름으로 카운트PropertyChanged를 제기한다 .

더 단순한 것은

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

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

    } 

추천하고 Collection.Count

에 XAML 바인딩에서 뭔가를하는 것입니다