Можно ли написать коллекционный тип DependencyProperty, который поддерживает привязку OneWayToSource? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть пользовательский контроль. У меня есть свойство зависимости.

public IList MySelectedItems
{
    get { return (IList)GetValue(MySelectedItemsProperty); }
    set
    {
        if (value != null)
        {
            SetValue(MySelectedItemsProperty, value);
        }
        else
        {
            ClearValue(MySelectedItemsProperty);
        }
    }
}

public static readonly DependencyProperty MySelectedItemsProperty = DependencyProperty.Register(
    "MySelectedItems", typeof(IList), typeof(MyGridControl), new PropertyMetadata(null));

И дополнительно инициализирую его в конструкторе

public MyGridControl()
{
    MySelectedItems = new ObservableCollectionCore<object>();
}

Я использую его в обработчике событий следующим образом

    if (MySelectedItems != null)
    {
        MySelectedItems.Clear();
        foreach (int index in OrderedSelection)
        {
            if ((bool)_selection[index])
            {
                MySelectedItems.Add(GetRowByListIndex(index));
            }
        }
        MySelectedItemsCount = MySelectedItems.Count;
    }

В представлении модель У меня есть это свойство

private ObservableCollection<TestData> _selectedData = new ObservableCollection<TestData>();
public ObservableCollection<TestData> SelectedData
{
    get { return _selectedData; }
    set
    {
        _selectedData = value;
        RaisePropertyChanged(nameof(SelectedData));
    }
}

, которое я связываю через xaml со свойством MySelectedItems

<local:MyGridControl MySelectedItems="{Binding Path=SelectedData}" />

Этот код работает нормально. MySelectedItems и SelectedData всегда равны по содержанию. Но у меня есть вопрос. Можно ли каким-то образом изменить мой код для использования привязки OneWayToSource?

MySelectedItems="{Binding Path=SelectedData, Mode=OneWayToSource}"

В настоящее время, если я пытаюсь это сделать, MySelectedItems инициализируется нулем. Почему? И возможно ли изменить это поведение?

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