[英]WPF DataGrid and DataGridTemplateColumn Header Problems
我有一段代碼的問題......
我有如下內容:
<DataGrid AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
ItemsSource="{Binding Path=RowData,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
RowHeaderWidth="0">
<DataGrid.Columns>
<DataGridTemplateColumn>
<DataGridTemplateColumn.Header>
<CheckBox IsChecked="{Binding RelativeSource={RelativeSource Findancestor, AncestorType={x:Type UserControl}},Path=DataContext.AreAllSelected}">
Select All
</CheckBox>
</DataGridTemplateColumn.Header>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Path=IsSelected,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGrid.Columns>
</DataGrid>
它位於View中,它源自UserControl類型 - 絕對可靠。 由於某種原因,綁定在TemplateColumn標頭中的CheckBox上失敗。 有什么不尋常之處在於我在其他視圖中使用了這個代碼 - 它的工作原理非常好並且沒有任何問題。 我總是首先創建ViewModel,並將其作為參數傳遞給View,其中DataContext在構造時設置為ViewModel,即
View(ViewModel myViewModel)
{
InitializeComponent();
DataContext = myViewModel;
}
ViewModel上有AreAllSelected屬性,但是我收到以下錯誤 - 所以我知道它沒有因某種原因找到祖先。
System.Windows.Data錯誤:4:無法找到綁定源,引用'RelativeSource FindAncestor,AncestorType ='System.Windows.Controls.UserControl',AncestorLevel ='1''。 BindingExpression:路徑= DataContext.AreAllSelected; 的DataItem = NULL; target元素是'CheckBox'(Name =''); target屬性是'IsChecked'(類型'Nullable`1')
奇怪的是,即使它不起作用,當我使用Snoop查看它時,它最初將無法工作。 當我查看Binding並深入研究它時,Binding現在可以工作了。
我想知道它是如何在Visual Tree級別構建它或者是什么? 正如我之前所說 - 我在其他視圖中已經完成了其他幾次,並且它們工作正常。 必須有一些奇怪的事情,我做錯了...
嘗試相反的方式:
View(ViewModel myViewModel)
{
DataContext = myViewModel;
InitializeComponent();
}
順便說一下,你應該使用HeaderTemplate模板標題。 單獨的標題只能是例如字符串值。
你放置了CheckBox。 這不是wpf的常用方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.