gpt4 book ai didi

c# - 将命令绑定(bind)到 DataGrid 中的元素

转载 作者:行者123 更新时间:2023-12-03 10:14:53 25 4
gpt4 key购买 nike

我有一个表,其中有一列包含一个 bool 值,我在其中放置了一个复选框。我试图将一个命令绑定(bind)到复选框,当我检查它时,它会在 View 模型中运行一个命令。我正在使用 MVVM 结构。这是我到目前为止所尝试的。

<DataGrid 
IsReadOnly="True"
Margin="0,10,0,0"
ItemsSource="{Binding Diary.Diaries}"
AutoGenerateColumns="False"
MinHeight="200"
SelectionMode="Single"
SelectionUnit="FullRow"
IsSynchronizedWithCurrentItem = "True"
>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Flagged">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid >
<CheckBox IsChecked="{Binding Flagged}" Command="{Binding Diary.FlagDiary}">
</CheckBox>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn >

<DataGridTextColumn Header="Diary ID" Binding="{Binding DiaryID}" />
</DataGrid.Columns>

</DataGrid>

这是 ViewModel 中的 RelayCommand。
FlagDiary = new RelayCommand(() =>
{
Debug.WriteLine("Test");
});

我一直无法让它运行 RelayCommand。知道我做错了什么吗?

最佳答案

Checkbox 的 DataContext 将设置为 DataGrid 的 ItemSource 中的对象之一(Diary.Diaries 条目之一)。这使得命令绑定(bind)无效。
您将需要进行相对源绑定(bind),以便访问 Diary.FlagDiary。这是一种方法(鉴于您在上面发布的 xaml)。

<CheckBox IsChecked="{Binding Flagged}"
Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.Diary.FlagDiary}" />
一旦命令触发,您可能想知道复选框用于哪个日记条目......对吗?为此,请将 CommandParameter 绑定(bind)添加到 Checkbox。现在,绑定(bind)看起来像这样:
<CheckBox IsChecked="{Binding Flagged}"
Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.Diary.FlagDiary}"
CommandParameter="{Binding}" />
您的中继命令代码也可能需要更改。大概是这样的吧?
FlagDiary = new RelayCommand((parameter) =>
{
Debug.WriteLine(parameter.ToString());
});

关于c# - 将命令绑定(bind)到 DataGrid 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32508468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com