我需要将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;
由于这是专有软件,我只包含了我认为理解该问题所必需的内容,但如果需要,我们会很乐意提供更多内容。非常感谢任何建议或指导。
答案 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)
您的ItemContainerStyle
与DataContext
的{{1}}不同,而是与ListBox项目的数据相同。因此,如果不将绑定Source设置为ListBox
的父级,则绑定到IsEnabled
属性是没有意义的。