1

Stackの既存の回答を確認しましたが、まだこれを正しく取得できません。

私からしてみれば:

<TextBlock Margin="8,0,0,0"

                        FontSize="48"
                        Text="{Binding YearsToSave}"
                        d:LayoutOverrides="Width">
...
  <SurfaceControls:SurfaceSlider x:Name="slider" Grid.Row="8"
                                Grid.Column="2"
                                VerticalAlignment="Bottom"
                                Maximum="{Binding YearsToSaveMaxValue}"
                                Minimum="{Binding YearsToSaveMinValue}"
                                Value="{Binding YearsToSave}"
                                d:LayoutOverrides="Width" />

私のビューモデルでは:

class YearsToSaveViewModel : INotifyPropertyChanged
{
    private int yearsToSave;
    public event PropertyChangedEventHandler PropertyChanged;

    public YearsToSaveViewModel()
    {
        Questions = new SavingsCalculatorQuestions();
        YearsToSave = 5; //Binds correctly
        YearsToSaveMinValue = 0;
        YearsToSaveMaxValue = 30;
    }

    public SavingsCalculatorQuestions Questions { get; set; }

    public int YearsToSaveMinValue { get; private set; }

    public int YearsToSaveMaxValue { get; private set; }

    public int YearsToSave
    {
        get { return yearsToSave; } 
        set
        {
            yearsToSave = value;
            OnPropertyChanged("YearsToSave");
        }
    }

    public void Reset()
    {
        YearsToSave = 0;
    }

    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            switch (name)
            {
                case "YearsToSave":
                    Questions.NumberOfYears = YearsToSave;
                    break;
            }
        }
    }
}

プロパティchangedイベントは正しく発生し、値を取得し、Questions.NumberOfYearsを正しく更新しますが、変更がビューに反映されることはありません。

4

2 に答える 2

2

もう1つのオプションは、NotifyPropertyWeaverプロジェクトを使用することです。

イベントコールが自動的に行われるので、気に入っています。(少し黒魔術ですが便利です)

http://crosscuttingconcerns.com/NotifyPropertyWeaverを参照して ください

于 2012-11-12T19:14:21.983 に答える
2

あなたのOnPropertyChanged方法はPropertyChangedイベントを発生させていません...

次のようにメソッドを更新します。

protected void OnPropertyChanged(string name)
{
    PropertyChangedEventHandler handler = PropertyChanged;
    if (handler != null)
    {
        switch (name)
        {
            case "YearsToSave":
                Questions.NumberOfYears = YearsToSave;
                handler(this, new PropertyChangedEventArgs(name));
                break;
        }
    }
}
于 2012-11-12T16:21:40.923 に答える