我有一个看起来像这样的用户控件,
<ItemsControl x:Name="_opt" ItemsSource="{Binding Sources, RelativeSource={RelativeSource AncestorType=UserControl}}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding }"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我创建了一个 IEnumerable 依赖属性,称为源,有点像这样,
public IEnumerable Sources
{
get { return (IEnumerable)GetValue(SourcesProperty); }
set { SetValue(SourcesProperty, value); }
}
public static readonly DependencyProperty SourcesProperty =
DependencyProperty.Register("Sources", typeof(IEnumerable),
typeof(MyUserControl), new PropertyMetadata(null));
我的用户控件构造函数如下所示,我也在此处分配 Itemsource,
public MyUserControl()
{
InitializeComponent();
}
我面临的问题是,当我将字符串列表分配给 Sources 属性时,它什么也不显示,但是如果我将 Itemsource 直接设置为该字符串列表,我可以做到这一点。 现在我可以在用户控件中设置字符串列表,但如果我在某处使用用户控件,我可以在那里设置 Itemsource,这就是我创建 IEnumerable 的原因。
这就是我使用用户控件的方式,
<local:MyUserControl x:Name="_uc"/>
public NewControl()
{
InitializeComponent();
_uc.Sources = MyListofString;
}
无论我尝试什么,每当我绑定或分配列表时,它都不会显示任何项目。我正确地创建了该属性,但仍然无法理解为什么它没有更新。
我通过使用 Observable 集合而不是 List 解决了这个问题, 仍然不确定为什么列表不起作用。