我想要做的是在选中DataGridCheckBoxColumn中的复选框时启用按钮。我做了一些研究,发现下面的stackoverflow。我发现在列上放置UpdateSourceTrigger = PropertyChanged应该可以解决问题,但是当我在我的属性上放置一个断点时,它就不会被调用。
Checkbox event that fires AFTER the value has changed
这是我的XAML代码:
<DataGrid Grid.Row="3" Grid.Column="1" AutoGenerateColumns="False" FontSize="18" ItemsSource="{Binding Path=MyProperty, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Path=Status, UpdateSourceTrigger=PropertyChanged}" Header="Verify" Width="1*"/>
<DataGridTextColumn Binding="{Binding Path=Id, UpdateSourceTrigger=PropertyChanged}" Header="PalletID" IsReadOnly="True" Width="2*"/>
</DataGrid.Columns>
</DataGrid>
在我的视图模型中,我的属性是:
private ObservableCollection<Objects.MyClass> _myProperty;
public ObservableCollection<Objects.MyClass> MyProperty
{
get { return _myProperty; }
set
{
_myProperty= value;
this.RaisePropertyChanged();
}
}
其中MyClass是一个包含三个属性的简单类:
public string Id { get; set; }
public bool Verified { get; set; }
public bool Status { get; set; }
public MyClass(string id, bool currentStatus)
{
Id = id;
Verified = currentStatus;
Status = false;//Set to false initially to deselect checkbox.
}
我有什么遗失的东西吗?根据我在线收集的内容,复选框列上的UpdateSourceTrigger = PropertyChanged是允许我在复选框值更改时查看的内容。任何帮助都会很棒。
答案 0 :(得分:0)
您的代码是合作伙伴。只需添加按钮并将Status属性绑定到按钮的IsEnabled属性。
<DataGrid Grid.Row="3" Grid.Column="1" AutoGenerateColumns="False" FontSize="18" ItemsSource="{Binding Path=MyProperty, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}">
<DataGrid.Columns>
<DataGridCheckBoxColumn Binding="{Binding Path=Status, UpdateSourceTrigger=PropertyChanged}" Header="Verify" Width="1*"/>
<DataGridTextColumn Binding="{Binding Path=Id, UpdateSourceTrigger=PropertyChanged}" Header="PalletID" IsReadOnly="True" Width="2*"/>
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button IsEnabled="{Binding Status}">I am a button</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>