C# 如何绑定到xaml中DataGridCheckBoxColumn的IsReadOnly属性?
我试图绑定到C# 如何绑定到xaml中DataGridCheckBoxColumn的IsReadOnly属性?,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我试图绑定到IsReadOnly属性,但它似乎不起作用。我怎样才能做到这一点?我的方法有什么问题?下面是复制问题的示例代码 更新: 添加了代码隐藏文件。。。我有一个可观察的集合作为代码隐藏的属性挂起,它被用作数据上下文。问题不在于属性何时更改,即使我第一次绑定它时,选中的属性已正确绑定,但IsReadonly未正确绑定 public class ModelClass:INotifyPropertyChanged { private bool m_IsReadOnly; publi
IsReadOnly
属性,但它似乎不起作用。我怎样才能做到这一点?我的方法有什么问题?下面是复制问题的示例代码
更新:
添加了代码隐藏文件。。。我有一个可观察的集合作为代码隐藏的属性挂起,它被用作数据上下文。问题不在于属性何时更改,即使我第一次绑定它时,选中的属性已正确绑定,但IsReadonly未正确绑定
public class ModelClass:INotifyPropertyChanged
{
private bool m_IsReadOnly;
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propName)
{
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
public bool IsReadOnly
{
get { return m_IsReadOnly; }
set
{
m_IsReadOnly = value;
OnPropertyChanged("IsReadOnly");
}
}
}
您可能需要在绑定
上设置模式
IsReadOnly={Binding IsReadOnly, Mode=OneWay}
默认的模式
不保证是单向的模式
-它取决于基础的依赖属性
,因此最好只指定它。尝试将它添加到绑定中:
Binding="{Binding IsReadOnly, Mode=OneWay, UpdataSourceTrigger=PropertyChanged}"
因此,该类属性的任何更改都会正确地通知用户界面,并正确地更新控件的IsReadOnly属性。我无法理解为什么我在这个问题上的方法不起作用。然而,我找到了一个解决我问题的替代方案。我没有使用DataGridCheckBoxColumn
,而是在datatemplate中使用DataGridTemplateColumn
和复选框。这样绑定工作正常
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsReadOnly}"
IsEnabled="{Binding IsReadOnly}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
这是因为在
中有两种类型的元素样式,您需要为ElementStyle指定ishitestvisible=“False”
参数
<DataGridCheckBoxColumn x:Name="col1"
Binding="{Binding IsReadOnly}"
IsReadOnly="{Binding IsReadOnly}"
ElementStyle="{StaticResource ReadOnlyCheckBoxStyle}"
Header="With Binding"
Width="SizeToHeader"/>
还有像这样的只读checkbox样式
<Style x:Key="ReadOnlyCheckBoxStyle" TargetType="{x:Type CheckBox}">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>
谢谢您,但指定模式也没有帮助。如果在属性设置器中使用RaisePropertyChanged(“IsReadOnly”),也会更简单,因为它是引发OnPropertyChanged事件的方法。@FrançoisBoivin此方法在此处称为OnPropertyChanged
,并在属性设置器中调用。事件本身被命名为PropertyChanged
。除此之外,在单向绑定上设置updatesourcetrigger
是毫无意义的。它只对双向或单向源绑定有影响。是的,我想说的是:RaisePropertyChanged引发PropertyChanged事件:当然,不同的是RaisePropertyChanged在这里有不同的名称。它被称为OnPropertyChanged。在调试期间,您是否在VS中显示任何绑定错误?请在第二个DataGridCheckBoxColumn上尝试Binding=“{Binding IsReadOnly,Mode=TwoWay}”
。我也有完全相同的问题,设置文字值有效,但使用绑定设置值无效,即使绑定正确。对我来说,这似乎是WPF的一个缺陷
<DataGridCheckBoxColumn x:Name="col1"
Binding="{Binding IsReadOnly}"
IsReadOnly="{Binding IsReadOnly}"
ElementStyle="{StaticResource ReadOnlyCheckBoxStyle}"
Header="With Binding"
Width="SizeToHeader"/>
<Style x:Key="ReadOnlyCheckBoxStyle" TargetType="{x:Type CheckBox}">
<Setter Property="IsHitTestVisible" Value="False"/>
</Style>