Предоставить свойство itemsource элементов управления внутри usercontrol - PullRequest
0 голосов
/ 28 мая 2018

У меня есть пользовательский элемент управления, содержащий несколько кнопок и ListView.

Я хочу, чтобы у моего пользовательского элемента управления было свойство ItemsSource, которое напрямую связывается с источником элементов списков.

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}" />

Что здесь не так?

1 Ответ

0 голосов
/ 28 мая 2018

Элемент ListView, который является частью MyControl, не подключен к 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 не знает о ListView в MyControl.Как это может связать их вместе?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...