我在DataGrid的资源中绑定值时遇到问题.在资源之外 - 标签它完美地工作,但在里面它不起作用.我想Datacontext可能已更改或为null.我不知道该怎么办.我读了一些关于freezables的内容,但我也没有让它们起作用.这是解决方案还是那个,我做不到的.这里我的代码与非工作和工作部分 - 仅用于演示.如果点击标题行,我需要在Resources-Section中使用Contextmenu才能获取它.
问题ContextMenu
不在于与DataGrid相同的Visual树,因此无法继承DataGrid的DataContext.
您可以使用它x:Reference
来获取DataGrid实例并使用它的DataContext进行绑定.(x:参考可从WPF 4.0获得)
给x:Name
dataGrid并绑定它:
<DataGrid ItemsSource="{Binding Lst, UpdateSourceTrigger=PropertyChanged}" x:Name="dataGrid"> <DataGrid.Resources> <ContextMenu x:Key="DataGridColumnHeaderContextMenu"> <MenuItem Header="{StaticResource General}"> <CheckBox Content="Testentry Header" IsChecked="{Binding DataContext.TestCheck, Source={x:Reference dataGrid}}"/> .... </DataGrid>
您也可以使用Freezable
类似于您提到的类来实现此目的.有关通过Freezable实现此目的的详细信息,请参阅此处的答案.