ComboBoxItem,IsEnabled,绑定到表值

时间:2010-11-29 17:22:43

标签: silverlight mvvm

我有一个dropdownlist控件,它的ItemsSource是T_LookupTable类型的项集合,它是db中的一个表,其中一个列是'isEnabled'。 如何将XAML中ComboBoxItem的IsEnabled属性绑定到集合中的此值? 此外,我在应用程序中有许多下拉菜单采用相同的方法,所以我想以某种方式使这个全局功能,如果可能,通过静态资源,是这样的可能吗?我找到了这块XAML,它可以工作,但是我希望这些项目在下拉列表中显示为灰色,这个方法只会在你无法点击它们的地方禁用它们,但是没有可视指示符表示该项目被禁用:

<ComboBox.ItemContainerStyle> 
    <Style TargetType="ComboBoxItem"> 
        <Setter Property="Template"> 
            <Setter.Value> 
                <ControlTemplate TargetType="ComboBoxItem"> 
                    <ContentPresenter x:Name="ContentPresenter" IsHitTestVisible="{Binding Path=isEnabled}" /> 
                </ControlTemplate> 
            </Setter.Value> 
        </Setter> 
    </Style> 
</ComboBox.ItemContainerStyle>

1 个答案:

答案 0 :(得分:0)

我遇到与TreeViewItems类似的问题...

基本上,你必须继承ComboBox类,重写GetContainerForItemOverride方法,如下所示:


protected override DependencyObject GetContainerForItemOverride()
{
  var result = new ComboBoxItem();
  result.SetBinding(Control.IsEnabledProperty, new Binding("IsEnabled"));
  return result;
}

它硬编码数据绑定到数据对象的IsEnabled属性。