わかりました、これは簡単なことだと思いましたが、明らかに私は何か間違ったことをしています。問題は、拡張 WPF ツールキットの DoubleUpDown コントロールの [上へ] および [下へ] ボタンをクリックすると、値が正しく更新されないことです。[上へ] をクリックすると、コントロールの値が変更されますが、ビュー モデルは更新されません。[上へ] をクリックしてから [下へ] をクリックするように変更した場合にのみ、モデルが更新されますが、その前の値が使用されます。
再現するために、次のような単純なビュー モデルを使用しました。
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
MyValue = 0.5;
}
private double _myValue;
public double MyValue
{
get { return _myValue; }
set
{
_myValue = value;
PropertyChanged(this, new PropertyChangedEventArgs("MyValue"));
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
}
そして、私の MainWindow.xaml は次のコードのようになります。ここでは、DoubleUpDown コントロールとラベルの両方が、TwoWay 方式で ViewModel の MyValue プロパティにバインドされています。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="MainWindow" Height="100" Width="200">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<xctk:DoubleUpDown
Value="{Binding MyValue, Mode=TwoWay}"
Increment="0.5"
Minimum="0.0"
Maximum="10"
ValueChanged="DoubleUpDown_ValueChanged"
/>
<Label Grid.Column="1" Content="{Binding MyValue, Mode=TwoWay}"/>
</Grid>
</Window>
コード ビハインドでは、MainWindow コンストラクターの DataContext を ViewModel のインスタンスに設定します。
public MainWindow()
{
DataContext = new ViewModel();
InitializeComponent();
}