[英]WPF DataGridTemplateColumn - Trigger for CheckBox IsChecked Property
我正在創建一個帶有DataGridTemplateColumn
CheckBox的WPF DataGrid
控件,該DataGridTemplateColumn
應將IsChecked屬性設置為true或false取決於DataTable
值)。
如果DataTable
行的值設置為1 ,則DataGridTemplateColumn
應該為true (選中)。 否則,它將為false (未選中)...默認情況下,每個新行都將設置為true ,但是我無法將這些CheckBox
行綁定到我的DataTable
值(將為1或2 )
我嘗試了以下c#代碼。 當我完成UserControl版本並遍歷DataTable
以保存其值時,它可以工作。但是,當我設置gridResultados.ItemsSource = dataTable.DefaultView時,顯然不檢查/取消選中我的CheckBoxes
因為在DataTable
列值之間沒有綁定( 1或2)和我的DataGridTemplateColumn
...這是我最接近的方法:
<DataGrid>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Value?" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="True" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked">
<Style TargetType="{x:Type CheckBox}">
<Style.Triggers>
<Trigger Property="Content" Value="1">
<Setter Property="IsChecked" Value="True"/>
</Trigger>
<Trigger Property="Content" Value="2">
<Setter Property="IsChecked" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
dataTable.Rows[gridResultados.SelectedIndex].SetField(4, 1);
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
dataTable.Rows[gridResultados.SelectedIndex].SetField(4, 2);
}
首先,我建議您不要在WPF中使用DataTable
,因為我們通常在WPF中使用EF, DataTable
是ADO.NET的一部分,並且它已過時且已過時。
對於您的問題,您需要解決一些與綁定和觸發器有關的問題。 首先,這里每行中的隱式DataContext
是DataRowView
。 僅適用於DataTrigger
使用(不適用於Trigger
)。 因此,您需要使用DataTrigger
來監聽索引[4]
(它引用第五列DataTrigger
的列)。 其次,您設置的Style
錯誤,應將其包裝在CheckBox.Style
以使您了解為CheckBox
而不是為其Content
設置了Style。 第三, Style
觸發器不能覆蓋本地設置的IsChecked
(如您的代碼中一樣),在這種情況下,模板觸發器可以覆蓋它,但是您也可以使用樣式設置器為IsChecked
設置默認值True
。 這是您應具有的代碼:
<DataGridTemplateColumn Header="Value?">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked">
<CheckBox.Style>
<Style TargetType="{x:Type CheckBox}">
<Setter Property="IsChecked" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding [4]}" Value="1">
<Setter Property="IsChecked" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding [4]}" Value="2">
<Setter Property="IsChecked" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
<CheckBox.Style>
</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
順便說一句,我可以看到您使用事件處理程序來更新基礎數據的值。 但是,就MVVM而言,這不是正確的方法,因為您幾乎需要的是綁定和相關內容。 但是,那部分是您的,您需要對此進行更多研究。 我認為在這里結束這個問題就足夠了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.