2015-05-08 50 views
0

我正在开发一个WPF应用程序使用WPF,我有一个组合框选择的项目被绑定到viewmodel,我有一个日期选择器。我想根据组合框的selecteditem禁用视图中的日期选择器。我如何禁用ViewModel的DatePicker WPF MVVM

组合:

<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}"/> 

我怎么能达到这个目的,我希望有点帮助。

回答

1

实现此目的的一种方法是向ViewModel添加一个属性并将DatePicker的IsEnabled属性绑定到该属性。然后,你需要设置紧急setter方法里面的属性:(假设你有一个名为紧急财产在你的视图模型):

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}"/> 
+0

感谢完美的作品。干杯。 –

0

您可以在viewmodel中创建属性IsDatePickerEnabled,并在datepicker上将属性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中。

private void Foo() 
{ 
... 
IsDataPickerEnabled = true/false; 
} 
相关问题