我是银光的新手,所以我不知道这是不是很明显。
我有一个datagrid,其中第一列是一个复选框(名为“Overridden”)。第二列(名为“ShowDetails”)是一个按钮,允许用户展开行以查看嵌套网格。如果未选中“重写”复选框,则应禁用“ShowDetails”按钮。
最初显示时屏幕正确。取消选中初始“重写”复选框时,“ShowDetails”按钮被禁用。当我选中“Overridden”复选框时,“overriddenFlag”会被更改,但是,“ShowDetails”按钮仍然处于禁用状态,而不是更改为“enabled”。
为什么“ShowDetails”按钮的“IsEnabled”标志不会改变?
以下是xaml
中的2列 <sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="Overridden">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding OverriddenFlag,Mode=TwoWay}"
Click="Overridden_Click"
HorizontalAlignment="Center"
/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="ShowDetails"
FontWeight="bold" FontSize="12"
Content="+" Click="ShowDetails_Click"
IsEnabled="{Binding OverriddenFlag, Mode=OneWay}"
/>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
以编程方式启用/禁用数据网格中的按钮的正确方法是什么?
我尝试过在Stack Overflow中看到的各种各样的东西,例如INotifyProperty,一个隐藏按钮的转换器(当我选中复选框时没有显示按钮),我我试图在Overridden_Click fct中做一些事情,比如FindName() - 但是没有成功。
答案 0 :(得分:2)
您遇到的最可能的问题是该行绑定的对象未实现INotifyPropertyChanged
。如果没有实现此接口,则您的按钮无法了解复选框对OverriddenFlag
属性所做的更改。
这是一个如何完成的例子: -
public class MyClass : INotifyPropertyChanged
{
private bool _overriddenFlag;
public bool OverriddenFlag
{
get { return _overriddenFlag; }
set
{
_overriddenFlag= value;
NotifyPropertyChanged("OverriddenFlag");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}