如何使用绑定设置 Combobox Item isEnabled 属性?

Posted

技术标签:

【中文标题】如何使用绑定设置 Combobox Item isEnabled 属性?【英文标题】:How can I set ComboboxItem isEnable property with binding? 【发布时间】:2022-01-03 12:34:35 【问题描述】:

我有一个模型视图和一个名为 isEnable 的属性,我想设置 comboboxItem IsEnable 属性并绑定到模型视图中创建的属性,问题是我在组合框中创建了数据模板,所以这不是一个简单的组合框,这是我的代码:

<ComboBox x:Name="ComboBoxUsers" ItemsSource="Binding Users" FontFamily="Arial" FontSize="11" Grid.Row="3" Height="30"  Margin="10,5,5,5">
<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal" >
            <Image />
            <TextBlock />
        </StackPanel>
        <DataTemplate.Resources>
            <Style TargetType="ComboBoxItem">
                <Setter Property="IsEnable" Value="Binding IsEnable"/>
            </Style>
        </DataTemplate.Resources>
    </DataTemplate>
</ComboBox.ItemTemplate>

简单的用户类:

public class Users 


    public string Name  get; set; 

    public bool IsEnable  get; set; 

    public Users()
    

    

我怎样才能做到这一点?

【问题讨论】:

我已经有一段时间没有用 WPF 做任何事情了,但我很确定你不能只将你的 ItemsSource 绑定到一个类,而是你必须将它绑定到一个属性,并且该属性必须是某种列表或集合,然后绑定到该集合的类的属性,例如Binding Path=IsEnable 是的,我做了这个,它是一个集合(列表) 【参考方案1】:

我通过添加此代码解决了我的问题:

 <ComboBox.ItemContainerStyle>
     <Style TargetType="ComboBoxItem"
        <Setter Property="IsEnable" Value="Binding IsEnable" />
     </Style>
 </ComboBox.ItemContainerStyle>

所以完整的代码是:

<ComboBox x:Name="ComboBoxUsers" ItemsSource="Binding Users" FontFamily="Arial" FontSize="11" Grid.Row="3" Height="30"  Margin="10,5,5,5">
<ComboBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal" >
            <Image />
            <TextBlock />
        </StackPanel>
         <ComboBox.ItemContainerStyle>
            <Style TargetType="ComboBoxItem" >
                <Setter Property="IsEnable" Value="Binding IsEnable" />
            </Style>
         </ComboBox.ItemContainerStyle>
    </DataTemplate>
</ComboBox.ItemTemplate>

【讨论】:

该类未实现INotifyPropertyChanged,因此任何属性更改都不会反映在 UI 上。如果你这样离开,你可能需要将绑定模式更改为OneTime,以避免内存泄漏。 你能告诉我更多关于OneTime模式的信息吗(提供更多细节)? 做一些研究,网上有很多资源会比我解释得更好。看到这个:docs.microsoft.com/en-us/dotnet/api/… 和这个:***.com/questions/18542940/…

以上是关于如何使用绑定设置 Combobox Item isEnabled 属性?的主要内容,如果未能解决你的问题,请参考以下文章

ComboBox:向项目添加文本和值(无绑定源)

ListBox 内的 DataContext ComboBox 绑定

c#wpf combobox将source绑定到一个collection,item作为另一个collection的属性

c# WPF listview的一列里面放着combobox 我在后台给combobox加了几个item,现在不显示。

如何将绑定连接到(Winform)ComboBox 控件以从绑定源获取/设置控件中的选择?

combobox绑定数据源后,怎样使其默认选中其中的一项?