[英]Binding Command to element in DataGrid
我有一個表,其中包含一個包含 bool 值的列,我在其中放置了一個復選框。我試圖將命令綁定到復選框,當我選中它時,它會在視圖模型中運行一個命令。 我正在使用 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 條目之一)。 這使得命令綁定無效。
您將需要進行相對源綁定,以便您可以訪問 Diary.FlagDiary。 這是一種方法(考慮到您在上面發布的 xaml)。
<CheckBox IsChecked="{Binding Flagged}"
Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.Diary.FlagDiary}" />
一旦命令觸發,您可能想知道復選框對應哪個日記條目......對嗎? 為此,請將 CommandParameter 綁定添加到復選框。 現在,綁定看起來像這樣:
<CheckBox IsChecked="{Binding Flagged}"
Command="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext.Diary.FlagDiary}"
CommandParameter="{Binding}" />
您的中繼命令代碼也可能需要更改。 大概是這樣的?
FlagDiary = new RelayCommand((parameter) =>
{
Debug.WriteLine(parameter.ToString());
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.