我寫了一個UserControl,它的DataContext包含一個集合和一個bool屬性。該集合正在數據網格中顯示(和編輯),該數據網格具有custrom列模板。列中控件的DataContext當然是UserControl的DataContext集合的一個項目。不過,我需要將列中控件的一個屬性綁定到UserControl的DataContext的bool屬性,而不是集合項。是否可以將WPF控件綁定到多個數據上下文?
你對如何解決這個問題有什麼想法嗎?
最好的問候,奧利弗
我寫了一個UserControl,它的DataContext包含一個集合和一個bool屬性。該集合正在數據網格中顯示(和編輯),該數據網格具有custrom列模板。列中控件的DataContext當然是UserControl的DataContext集合的一個項目。不過,我需要將列中控件的一個屬性綁定到UserControl的DataContext的bool屬性,而不是集合項。是否可以將WPF控件綁定到多個數據上下文?
你對如何解決這個問題有什麼想法嗎?
最好的問候,奧利弗
我在另一篇文章
Getting at the "parent" of a databound object?
這裏拉這直接從我的答案是從帖子的代碼,我認爲可能涉及到什麼youre試圖做:
<ListBox Name="list" ItemsSource="{Binding Items}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding}"/>
<ComboBox ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}, Path=DataContext.Values}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
基本上,ListBox的DataContext在這種情況下包含一些列表和DataTemplate中的組合框ItemTemplate綁定到ListBox的DataContext的不同成員,而ItemsSource綁定到DataContext的Items成員。我認爲這可能適用於您的DataGrid和列模板。
解決方案1.創建一個包含collection和一個bool屬性的自定義類,並將DataContext設置爲該類的一個實例。
解決方案2.將用戶控件的DataContext設置爲集合並向用戶控件添加一個bool屬性。
XAML:
<UserControl x:Class="DataContextDemo.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="self">
<StackPanel>
<ListBox ItemsSource="{Binding}" />
<CheckBox IsChecked="{Binding Path=MyBoolProp, ElementName=self}" />
</StackPanel>
</UserControl>
後面的代碼:
using System.Windows;
using System.Windows.Controls;
namespace DataContextDemo
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public bool MyBoolProp
{
get { return (bool)GetValue(MyBoolPropProperty); }
set { SetValue(MyBoolPropProperty, value); }
}
public static readonly DependencyProperty MyBoolPropProperty =
DependencyProperty.Register("MyBoolProp",
typeof(bool),
typeof(UserControl1),
new UIPropertyMetadata(true));
}
}