我有一个包含一些按钮和ListView的用户控件。
我希望我的自定义控件具有ItemsSource
属性,该属性直接绑定到listviews itemsource。
MyControl.xaml.cs
public partial class MyControl : UserControl
{
public static DependencyProperty ItemsSourceProperty =
ListView.ItemsSourceProperty.AddOwner(typeof(AddFilesControl));
public ObservableCollection<DocumentFile> ItemsSource
{
get { return (ObservableCollection<DocumentFile>)GetValue(ItemsSourceProperty); }
set { SetValue(ItemsSourceProperty, value); }
}
}
MyControl.xaml
<UserControl x:Class="[...].MyControls.MyControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008">
<Grid>
<ListView>
<ListView.ItemTemplate>
[...]
</ListView.ItemTemplate>
</ListView>
</Grid>
</UserControl>
MyViewModel.cs (设为MyWindow
的数据源仅包含MyControl
)
public class MyViewModel : INotifyPropertyChanged
{
public ObservableCollection<DocumentFile> DefaultList { get; set; }
}
调试时不显示任何项目,但ViewModel中有项目。
绑定似乎是正确的。
<custom:MyControl ItemsSource="{Binding DefaultList}" />
这里有什么问题?
答案 0 :(得分:2)
作为MyControl一部分的ListView元素未连接到MyControl.ItemsSource
可以通过创建绑定来修复:
<UserControl x:Class="[...].MyControls.MyControl"
x:name="myControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008">
<Grid>
<ListView ItemsSource="{Binding ItemsSource, ElementName=myControl}">
</ListView>
</Grid>
</UserControl>
DP.AddOwner()
方法无法创建绑定。 ItemsSourceProperty
DP由ItemsControl类声明。 AddOwner
无法了解MyControl中的ListView。它如何将它们绑在一起?