0

わかりました、これは簡単なことだと思いましたが、明らかに私は何か間違ったことをしています。問題は、拡張 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();
    }
4

1 に答える 1

1

DoubleUpDownコントロールのデフォルトのバインディング更新ロジックはですLostFocusUpdateSourceTrigger=PropertyChangedこのようにバインディングで明示的に設定してみてください-

<xctk:DoubleUpDown
      Value="{Binding MyValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
      Increment="0.5"
      Minimum="0.0"
      Maximum="10"
      ValueChanged="DoubleUpDown_ValueChanged"/>
于 2012-10-14T12:23:12.983 に答える