喜,
我需要帮助找出如何访问wpf datagrid标头中的复选框.这就是我所拥有的:
<DataGrid.Columns>
<DataGridTemplateColumn CanUserReorder="False" CanUserResize="False">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Name="cbxAll" Checked="CheckBox_Checked" Unchecked="CheckBox_Unchecked" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=Checked, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding Path=NoErrors}" Name="theCheckbox" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" HorizontalAlignment="Center" VerticalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)
我已设置Name为复选框,但由于某种原因,我无法从代码端访问它.
我刷新数据网格项后,我需要访问复选框以取消选中它.我怎样才能做到这一点?
MVVM中的一个工作示例:
视图模型
public class MainWindowViewModel : INotifyPropertyChanged
{
private bool allItemsAreChecked;
public event PropertyChangedEventHandler PropertyChanged;
public bool AllItemsAreChecked
{
get
{
return this.allItemsAreChecked;
}
set
{
this.allItemsAreChecked = value;
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs("AllItemsAreChecked"));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
XAML
<DataGridTemplateColumn CanUserReorder="False" CanUserResize="False">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding
RelativeSource={RelativeSource AncestorType={x:Type DataGrid}},
Path=DataContext.AllItemsAreChecked}" />
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
尽管绑定可能是您应该采用的方式,但也可以按照您的要求进行操作。这是一种方法:
1.给你的标题CheckBox一个Uid
<CheckBox Uid="CheckAll" />
Run Code Online (Sandbox Code Playgroud)
2.命名你的DataGrid
<DataGrid Name="myDataGrid" />
Run Code Online (Sandbox Code Playgroud)
3.实现以下扩展方法
public static UIElement FindUid(this DependencyObject parent, string uid)
{
var count = VisualTreeHelper.GetChildrenCount(parent);
if (count == 0) return null;
for (int i = 0; i < count; i++)
{
var el = VisualTreeHelper.GetChild(parent, i) as UIElement;
if (el == null) continue;
if (el.Uid == uid) return el;
el = el.FindUid(uid);
if (el != null) return el;
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
CheckBox4.像这样访问并取消选中后面的代码
CheckBox checkBox = myDataGrid.FindUid("CheckAll") as CheckBox;
checkBox.IsChecked = false;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8450 次 |
| 最近记录: |