WPF数据绑定到bool不工作

时间:2014-01-07 20:46:12

标签: c# wpf

我需要将IsEnabled s的ListBoxItem属性绑定到驻留在bool中的DataContext属性值。我已经按照几个教程来到达我所在的地方但是我仍然没有运气。在我的XAML中,我在setter中定义了ListBox.ItemContainerStyle,如下所示:

<ListBox Name="Requests">
     <ListBox.ItemContainerStyle>
          <Style TargetType="{x:Type ListBoxItem}">
               <Setter Property="IsEnabled" 
                       Value="{Binding IsEnabled}"/>

bool属性值位于设置为DataContext的类中,如下所示:

public class dcSystemRequests : INotifyPropertyChanged
    {
        private bool _IsEnabled;
        public bool IsEnabled
        {
            get 
            {
                return _IsEnabled; 
            }
            set 
            {
                if (_IsEnabled != value)
                {
                    _IsEnabled = value;
                    NotifyPropertyChanged("IsEnabled");
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        protected void NotifyPropertyChanged(string propertyChanged)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyChanged));
            }
        }

现在,当我修改属性时,我没有按预期看到UI中反映的值;正在改变代码中的属性值,如下所示:

((dcSystemRequests)DataContext).IsEnabled = !((dcSystemRequests)DataContext).IsEnabled;

由于这是专有软件,我只包含了我认为理解该问题所必需的内容,但如果需要,我们会很乐意提供更多内容。非常感谢任何建议或指导。

2 个答案:

答案 0 :(得分:2)

如果IsEnabled属性是ListBox的DataContext的一部分,那么您需要使用RelativeSource绑定:

<Style TargetType="ListBoxItem">
    <Setter Property="IsEnabled" 
            Value="{Binding DataContext.IsEnabled, RelativeSource={RelativeSource AncestorType=ListBox}"/>
</Style>

DataContext的{​​{1}}是每个对应的数据项。

有关详细信息,请参阅ItemsControl

答案 1 :(得分:1)

您的ItemContainerStyleDataContext的{​​{1}}不同,而是与ListBox项目的数据相同。因此,如果不将绑定Source设置为ListBox的父级,则绑定到IsEnabled属性是没有意义的。