0

予想される行動

  1. ComboBox と DatePicker があります。
  2. コンボ ボックスの選択が変更された場合、コンボ ボックスの選択に応じて、DatePicker を有効または無効にする必要があります。

私が実装しようとしている方法

日付間隔と日付ピッカーの XAML コード

<ComboBox ItemsSource="{Binding Source={StaticResource viewByInterval}}"
          SelectedValuePath="Value"
          SelectedItem="{Binding IntervalMode,Mode=TwoWay}" />

<DatePicker SelectedDate="{Binding EndDate,Mode=TwoWay}"
            IsEnabled="{Binding Path=EndDateEnabled[0],Mode=TwoWay}">

EndDateEnabled を変更するためのモデル コードを表示する

public bool EndDateEnabled { get; set; }

public DateMode IntervalMode
{
    get
    {
        return _dateModeValue;
    }
    set
    {
        _dateModeValue = value;
        EndDateEnabled =  (value == DateMode.CustomDateRange);                
    }
}

機能を実現できません。ご意見をお聞かせください。

4

2 に答える 2

5

その部分は必要ありません[0](コレクションではなく bool です)。バインディングは次のようにする必要はありませんTwoWay

IsEnabled="{Binding Path=EndDateEnabled}"

INotifyPropertyChangedまた、ViewModelに実装し、プロパティ (およびビューがバインドされているすべてのプロパティ)のPropertyChangedイベントを発生させる必要があります。EndDateEnabled

private bool _endDateEnabled;
public bool EndDateEnabled
{
    get { return _endDateEnabled; }
    set
    {
        if (value != _endDateEnabled)
        {
            _endDateEnabled = value;
            OnPropertyChanged("EndDateEnabled");
        }
    }
}

EndDateEnabledゲッターのみを持つ計算されたプロパティにすることもできることに注意してください。

public bool EndDateEnabled
{
    get { return _dateModeValue == DateMode.CustomDateRange; }
}

この場合、バインディングが更新されるようOnPropertyChanged("EndDateEnabled")に、 setter を呼び出す必要があります。DateModeValue

于 2012-08-30T18:32:48.227 に答える
0

私が見る2つの問題があります。まず、EndDateEnabledへのバインドは次のようになります。

IsEnabled="{Binding Path=EndDateEnabled}"

バインディングのターゲットは単なるplanboolプロパティであるため、[0]は無効または必要ありません。TwoWayはここでは適用されるべきではないと思いますが、それを持っていても問題はありません。

プロパティが変更されたことをUIに通知するために、バッキングViewModelはINotifyPropertyChangedを実装する必要があります。EndDateEnabledプロパティのコードは、次のようになる可能性があります。

private bool endDateEnabled = false;
public bool EndDateEnabled 
{
    get { return endDateEnabled; }
    set 
    {
        if (endDateEnabled != value)
        {
            endDateEnabled = value;
            if (PropertyChanged != null)
                PropertyChanged(this, new PropertyChangedEventArgs("EndDateEnabled"));
        }
    }
}

私はそれを記憶から行ったので、完璧ではないかもしれませんが、それは一般的な考え方です。

于 2012-08-30T18:36:54.367 に答える