2012-02-02 5 views
0

편집 : XAML에서 Minimum="1"을 제거하면 바인딩이 제대로 작동합니다. SL 도구 키트 문제 일 수 있습니까?OC가 업데이트되면 ObservableCollection.Count에 바인딩이 업데이트되지 않습니다.

Silverlight Toolkit의 NumericUpDown 값을 ObservableCollection의 Count에 바인딩하려고합니다.

내 ViewModel의 생성자에서 컬렉션에 항목을 추가하고 그에 따라 바인딩을 업데이트합니다. 그러나 NumericUpDown의 값은 변경되지 않습니다 (1로 유지됨).

디자이너가 열려 있고 IntelliSense가 실행되는 동안 바인딩을 편집하면 값이 디자이너에서 올바른 값으로 업데이트됩니다.

내가 여기 뭔가 잘못 했습니까?

바인딩 코드

<toolkit:NumericUpDown x:Name="numberOfCubesUpDown" IsEnabled="True" Maximum="9" Minimum="1" Style="{StaticResource ButtonSpinnerHorizontalStyle}" Value="{Binding Path=Cubes.Count}" Height="30" FontSize="14"> 
    <i:Interaction.Triggers> 
    <i:EventTrigger EventName="ValueChanged"> 
     <cmd:EventToCommand Command="{Binding ChangeNumberOfCubesCommand}" PassEventArgsToCommand="True"></cmd:EventToCommand> 
    </i:EventTrigger> 
    </i:Interaction.Triggers> 
</toolkit:NumericUpDown> 

뷰 모델 바인딩 정의 CubeSet는 ObservableCollection에에게 내가 CubeSet

 Cubes = new CubeSet(); 
     for (int i = 0; i < 6; i++) { Cubes.Add(new Cube()); } 
,691 변경

public CubeSet Cubes 
    { 
     get { return _cubes; } 

     set 
     { 
      if (_cubes == value) { return; } 
      _cubes = value; 
     } 
    } 

를 구현

답변

0

클래스는 INotifyPropertyChanged 인터페이스를 구현하고 setter에서 PropertyChanged 이벤트를 발생시켜야합니다. 이 같은

뭔가 : 업데이트 할 바인딩, 당신은 setter 메소드를 통해 값을 설정해야합니다

using System.ComponentModel; 

namespace Sample.ViewModels 
{ 
    public class ViewModelBase : INotifyPropertyChanged 
    { 
     #region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     #endregion 

     protected void OnPropertyChanged(string name) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(name)); 
      } 
     } 
    } 
} 

와 세터/수완이

public CubeSet Cubes 
{ 
    get { return _cubes; } 

    set 
    { 
     if (_cubes == value) { return; } 
     _cubes = value; 

     OnPropertyChanged("Cubes"); 
    } 
} 

처럼 될 것입니다. 물론 클래스 내에서 원하는 위치에서 OnPropertyChanged 이벤트를 수동으로 발생시켜 View에서 업데이트 된 값을 확인하도록 할 수 있습니다.

또한 바인딩에서 모드를 설정해야합니다. 기본적으로 OneWay로 설정됩니다.

편집 : 죄송합니다. 나는 ObservableCollection을 잊어 버렸습니다. 아마도 당신은 틀린 DataContext를 가지고있을 것입니다.

+0

IntelliSense가 실행될 때 Designer에서 언급 한 그 버크 때문에 DataContext가 정확하다고 생각합니다.하지만 ObservableCollection (CubeSet)이 업데이트 될 때 PropertyChanged가 실행되지 않습니다. –

+0

흠, 나는 수집 카운트 값을 반환하고 수동으로 OnPropertyChanged ("Count")를 호출하거나 목록에서 항목을 제거 할 때마다 getter를 작성하려고합니다. 즉 ObservableCollection add/remove/set 메서드를 재정의해야한다는 의미입니다. 그래도 여전히 작동하지 않는다면 다른 것이어야합니다. –

관련 문제