根据视图模型中的属性将 IsEnabled 设置为 true 或 false

use*_*426 0 c# data-binding wpf xaml mvvm

预期行为

  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}">
Run Code Online (Sandbox Code Playgroud)

查看用于更改 EndDateEnabled 的模型代码

public bool EndDateEnabled { get; set; }

public DateMode IntervalMode
{
    get
    {
        return _dateModeValue;
    }
    set
    {
        _dateModeValue = value;
        EndDateEnabled =  (value == DateMode.CustomDateRange);                
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法实现该功能。请指教。

Tho*_*que 5

您不需要该[0]部分(它是一个布尔值,而不是一个集合),并且绑定不需要是TwoWay

IsEnabled="{Binding Path=EndDateEnabled}"
Run Code Online (Sandbox Code Playgroud)

INotifyPropertyChanged您还需要在 ViewModel 中实现,并引发属性(以及视图绑定到的所有属性)PropertyChanged的事件:EndDateEnabled

private bool _endDateEnabled;
public bool EndDateEnabled
{
    get { return _endDateEnabled; }
    set
    {
        if (value != _endDateEnabled)
        {
            _endDateEnabled = value;
            OnPropertyChanged("EndDateEnabled");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,EndDateEnabled也可以是仅具有 getter 的计算属性:

public bool EndDateEnabled
{
    get { return _dateModeValue == DateMode.CustomDateRange; }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您需要调用OnPropertyChanged("EndDateEnabled")setter DateModeValue,以便刷新绑定。