문제

Silverlight 3.0에서 확인란의 양방향 데이터 밴드를 설정하는 간단한 문제가 있습니다. 그것은 쉬운 일이 아니지만 아마도 나는 오늘 내 뇌의 집을 잊어 버렸을 것입니다 ...

내 .. '데이터'를 나타내는 모델 클래스를 정의했습니다. inotifyPropertyChanged 인터페이스를 구현하여 UI가 데이터가 변경되는시기를 확인할 수 있도록했습니다.

public class Model : INotifyPropertyChanged
{
    private bool _value;
    public bool Value
    {
        get { return this._value; }
        set
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
            this._value = value;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

다음으로 '양식'에 확인란과 버튼을 넣습니다.

    <StackPanel Orientation="Horizontal">
        <CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>    
        <Button Click="Button_Click" Content="Test" />
    </StackPanel>

그런 다음 데이터를 생성자에 제공했습니다.

    public MainPage()
    {
        InitializeComponent();

        this.DataContext = new Model() { Value = true };
    }

문제는 inotifyPropertyChanged를 구현하지 않는 한 확인/확인을 위해 확인란을 두 번 클릭해야한다는 것입니다. 그러나 구현되면 기본 데이터를 변경하는 경우 UI에 알 수 없습니다.

ISChecked Binding Expression에서 Mode = Twoway 비트를 제거하면 모델이 인터페이스를 구현하더라도 UI는 기본 데이터 변경을 알지 못합니다.

어떻게해야합니까 :

  1. 시동시 확인란을 데이터에 바인딩하십시오
  2. 기본 데이터를 수정하기 위해 CheckBox가 변경된 변경 사항을 확인하십시오.
  3. 체크 박스가 기본 데이터 변경을 감지하고 자체적으로 업데이트합니까?
도움이 되었습니까?

해결책

설정 속성 절차에 시퀀싱 오류가 발생하여 할당해야합니다. _value ~ 전에 변경 알림 :-

    set
    {
        this._value = value;
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));

    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top