组合框项上的绑定已启用不起作用

本文关键字:启用 不起作用 绑定 组合 | 更新日期: 2023-09-27 18:31:09

我有这个模型:

public class Option : BindableBase
{
    private bool _enabled;
    public bool Enabled
    {
        get
        {
            return _enabled;
        }
        set
        {
            SetProperty(ref _enabled, value);
        }
    }
    private string _value;
    public string Value
    {
        get
        {
            return _value;
        }
        set
        {
            SetProperty(ref _value, value);
        }
    }
}

在我的视图模型中,我得到了一个ObservableCollection<Option>类型的列表Options

我使用以下 XAML 代码段:

<ComboBox Width="200"
          ItemsSource="{Binding Options}">
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Value}"/>
                <TextBlock Text="{Binding Enabled}"/>
            </StackPanel>
        </DataTemplate>
     </ComboBox.ItemTemplate>
     <ComboBox.ItemContainerStyle>
         <Style TargetType="ComboBoxItem">
             <Setter Property="IsEnabled" Value="{Binding Enabled}"/>
         </Style>
     </ComboBox.ItemContainerStyle>
 </ComboBox>

我在列表中添加了一些Option,其中一些将Enabled属性设置为 true,而另一些则没有。

但是,具有要false属性的那些仍然在ComboBox中启用,我可以选择它们(而我不应该!使用此行代码时:

 <Setter Property="IsEnabled" Value="false"/>

这些选项实际上被禁用(我无法选择其中任何一个),但我想使用一些绑定。有人可以解释我在这里做错了什么吗?

组合框项上的绑定已启用不起作用

您正在对 ComboBoxItem 的内容设置 IsEnabled,而您需要在 ComboBoxItem 本身上设置它。您需要在 ItemContainerStyle 中设置绑定。不过,我不确定样式设置器是否支持绑定。如果不是,则可能需要使用解决方法来设置绑定。

也许你需要改用路径。你可以试试这个:

<Setter Property="IsEnabled" Value="{Binding Path=Enabled}"/>