我写了一个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));
}
}