WPF / XAML: добавление элемента в свойство зависимостей типа list - PullRequest
0 голосов
/ 24 мая 2019

То, что я хочу, это свойство зависимости, которое может содержать список чего-либо. Если элемента нет, список не должен быть пустым, но свойство зависимости должно быть нулевым.

Вот определение:

public List<Element> Elements {
  get { return (List<Element>)GetValue(ElementsProperty); }
  set { SetValue(ElementsProperty, value); }
}

public static readonly DependencyProperty ElementsProperty =
    DependencyProperty.Register("Elements", typeof(List<Element>), typeof(ParameterControl), new PropertyMetadata(null));

При добавлении элемента ...

<controls:Knob.Elements>
    <controls:Element Position="50,0" Text="j"/>
</controls:Knob.Elements>

... Я получаю это исключение.

System.Windows.Markup.XamlParseException: ... "Elements" ist NULL.

Если я заменю «new PropertyMetadata (null)» на «new PropertyMetadata (new List ())», это работает. Но в этом случае свойство зависимости не равно нулю, если элемента нет.

1 Ответ

1 голос
/ 24 мая 2019

Если я заменю «new PropertyMetadata (null)» на «new PropertyMetadata (new List ())», это будет работать.

Тогда список по умолчанию будет доступен всем экземплярамконтроля.Если вы хотите список по умолчанию, вы должны инициализировать List<Element> в конструкторе:

public class ParameterControl : Control
{
    public ParameterControl()
    {
        Elements = new List<Element>();
    }

    public List<Element> Elements
    {
        get { return (List<Element>)GetValue(ElementsProperty); }
        set { SetValue(ElementsProperty, value); }
    }

    public static readonly DependencyProperty ElementsProperty =
        DependencyProperty.Register("Elements", typeof(List<Element>), typeof(ParameterControl), new PropertyMetadata(null));

}

Так большинство свойств зависимостей коллекции реализованы в WPF, то есть они всегда возвращают фактический объект коллекции, который может бытьпустой.

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