WPF绑定到子集合
如果父数据源的子属性是一个集合,比如说它被称为ChildCollection,那么引用它有什么技巧吗 所以,这个代码示例基本上就是我要做的。但是,当我使用这种方法时,我不会向我的子控件获取任何数据WPF绑定到子集合,wpf,data-binding,collections,Wpf,Data Binding,Collections,如果父数据源的子属性是一个集合,比如说它被称为ChildCollection,那么引用它有什么技巧吗 所以,这个代码示例基本上就是我要做的。但是,当我使用这种方法时,我不会向我的子控件获取任何数据 <UserControl> <UserControl.Resources> <sample:Data x:Key="MyData" /> </UserControl.Resources> <Canvas Da
<UserControl>
<UserControl.Resources>
<sample:Data x:Key="MyData" />
</UserControl.Resources>
<Canvas DataContext="{StaticResource MyData}">
<TextBlock Text="{Binding Title}" />
<My:UserControl DataContext="{Binding ChildCollection}" />
</Canvas>
</UserControl>
提前感谢您的帮助。如果我正确理解您的代码,您希望集合位于UserControl的DataProperty中 要实现这一点,必须按如下方式进行绑定:
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data", typeof(IEnumerable), typeof(ButtonList),
new UIPropertyMetadata(new PropertyChangedCallback(DataChanged)));
public DoubleCollection Data
{
get { return (DoubleCollection)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
static void DataChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
(sender as FrameworkElement).DataContext = e.NewValue;
}
public void SetData(IEnumerable data)
{
(View as CollectionViewSource).Source = data;
}
<Canvas DataContext="{StaticResource MyData}">
<TextBlock Text="{Binding Title}" />
<My:UserControl Data="{Binding ChildCollection}" />
</Canvas>
而不是:
<Canvas DataContext="{StaticResource MyData}">
<TextBlock Text="{Binding Title}" />
<My:UserControl DataContext="{Binding ChildCollection}" />
</Canvas>
希望这是有帮助的。另外:我不知道画布是否将其DataContext继承给childs。使用面板代替网格/堆栈面板/包装面板
Jan下面是一个带有用户控件按钮列表的工作示例,该列表的DP类型为IEnumerable,并为每个双精度值创建一个按钮。将其与您的代码进行比较,以查看您的错误操作 XAML: 代码隐藏:
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace UserControlDemo
{
public partial class ButtonList : UserControl
{
public ButtonList()
{
InitializeComponent();
}
public IEnumerable<double> Data
{
get { return (IEnumerable<double>)GetValue(DataProperty); }
set { SetValue(DataProperty, value); }
}
public static readonly DependencyProperty DataProperty =
DependencyProperty.Register("Data",
typeof(IEnumerable<double>),
typeof(ButtonList),
new UIPropertyMetadata(new List<double>()));
}
}
用法:
<UserControlDemo:ButtonList Data="{Binding Path=Numbers}" />
另外,请尝试在面板上为DataContext绑定使用DynamicSource而不是StaticResource。画布是从面板派生的。所有框架元素都提供DataContext继承。这是不对的。框架组件不继承其DataContext。因为我没有用Canvas测试它,所以我提到了它。
<UserControlDemo:ButtonList Data="{Binding Path=Numbers}" />