繁体   English   中英

在用户控件内部公开控件的itemsource属性

[英]Expose itemsource property of controls inside a usercontrol

我有一个用户控件,其中包含一些按钮和一个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 (设置为仅包含MyControlMyWindow的数据源)

public class MyViewModel : INotifyPropertyChanged
{
    public ObservableCollection<DocumentFile> DefaultList { get; set; }
}

调试时不显示任何项目,但ViewModel中有项目。

绑定似乎是正确的。

<custom:MyControl ItemsSource="{Binding DefaultList}" />

这是怎么了

作为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。 如何将它们绑定在一起?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM