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>