首页 > 解决方案 > 将 DatePicker.IsEnabled 绑定到 ComboBoxItem.IsSelected

问题描述

我有一个有两个选项的 ComboBox,如下所示:

<ComboBox Name="TypeComboBox">
    <ComboBoxItem Name="TemporaryComboItem">Temporary</ComboBoxItem>
    <ComboBoxItem Name="PermanentComboItem">Permanent</ComboBoxItem>
</ComboBox>

如果选择了“临时”选项,我有一个 DatePicker 来选择到期日期,如下所示:

<DatePicker
    Name="ExpirationDatePicker"
    IsEnabled="{Binding TemporaryComboItem.IsSelected}" 
/>

但是,这Binding似乎不起作用,因为无论所选选项如何,都可以使用 DatePicker。

How can I have the DatePicker to be functional only when one of the options is selected?

标签: wpfxaml

解决方案


一个有点脏的解决方案:

<ComboBox Name="TypeComboBox">
    <ComboBoxItem Name="TemporaryComboItem" Tag="True">Temporary</ComboBoxItem>
    <ComboBoxItem Name="PermanentComboItem" >Permanent</ComboBoxItem>
</ComboBox>

<DatePicker Name="ExpirationDatePicker"
            IsEnabled="{Binding ElementName=TypeComboBox, Path=SelectedItem.Tag, FallbackValue=False}" />

请注意我如何为临时项设置 Tag 属性并更改 IsEnabled 属性的绑定。绑定现在“查看”组合框的选定项的标记。如果不存在,则默认为 false。

这“滥用”了 Tag 属性。一般来说,我建议不要这样做,因为不清楚 Tag 属性的作用/含义。

一种正确的方法可能是将所有这些 UI 元素绑定到 ViewModel,以便 DatePicker 可以绑定到 ViewModel 上更清楚地表达含义/用途的属性。


推荐阅读