如何从 viewmodel WPF MVVM 禁用 DatePicker

How can I disable DatePicker from viewmodel WPF MVVM

我正在使用 WPF 开发 WPF 应用程序,我有一个组合框,其中选定的项目绑定到视图模型,我有一个日期选择器。我想根据组合框的选定项目禁用视图中的日期选择器。

组合:

<ComboBox x:Name="comboBox2" Grid.Row="6" Grid.Column="1" SelectedIndex="0" ItemsSource="{Binding Path=DueDateOptions}" SelectedValue="{Binding Urgent}">

日期选择器:

<DatePicker x:Name="datePicker1" Grid.Row="6" Grid.Column="2" SelectedDate="{Binding DueDate, Mode=TwoWay}"/>

怎样才能达到这个目的,希望大家多多帮助

您可以在视图模型中创建 属性 IsDatePickerEnabled 并将日期选择器上的 属性 IsEnabled 绑定到此 属性。

<DatePicker x:Name="datePicker1" Grid.Row="6" Grid.Column="2" SelectedDate="{Binding DueDate, Mode=TwoWay}" IsEnabled="{Binding IsDatePickerEnabled}"/>    

private bool _isDatePickerEnabled;
public bool IsDatePickerEnabled
{
    get{return _isDatePickerEnabled;}
    set 
    {
        _isDatePickerEnabled = value;
        OnPropertyChanged(()=>IsDatePickerEnabled);
    }
}

然后在setter of Urgent 属性调用方法判断数据选择器是否开启

private void Foo()
{
...
IsDataPickerEnabled = true/false;
}

实现此目的的一种方法是,将 属性 添加到 ViewModel 并将 DatePicker 的 IsEnabled 属性 绑定到它。然后你需要在 Urgent 属性 的 setter 里面设置 属性:(假设你的 ViewModel 中有一个名为 Urgent 的 属性):

class YourViewModel {
    private bool allowPickDate;
    public bool AllowPickDate {
        get {
            return this.allowPickDate;
        }
        set {
            if (this.allowPickDate != value) {
                this.allowPickDate = value;
                this.OnPropertyChanged("AllowPickDate");
            }
       }
   }
   public UrgentType Urgent {
       get {
           ....
       }
       set {
           ....
           if (value == [whatever you expect]) {
               this.AllowPickDate = true;
           }
           else {
               this.AllowPickDate = false;
           }
       }
  }

XAML:

  <DatePicker x:Name="datePicker1" IsEnabled={Binding AllowPickDate} Grid.Row="6" Grid.Column="2" SelectedDate="{Binding DueDate, Mode=TwoWay}"/>