WPF Control, свойство, которое привязывается к списку на модели представления, хотело бы определить список в Xaml - PullRequest
0 голосов
/ 06 ноября 2019

Я работал над элементом управления WPF UI.

Я определил свойство зависимостей, которое представляет собой список строк.

Это связывается со свойством списка в модели представления, как и ожидалось.

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

<local:MyControl MyList = "one,two,three">

Свойство MyList в моем элементе управления.

public static readonly DependencyProperty MyListProperty =
            DependencyProperty.Register("MyList", typeof(List<string>), typeof(MyControl));

1 Ответ

1 голос
/ 06 ноября 2019

Для поддержки инициализации списка из строки, содержащей элементы, разделенные запятыми, например

MyList="one, two, three"

, вы должны зарегистрировать пользовательский TypeConverter.

Обратите внимание, что в приведенном ниже коде в качестве типа свойства используется IList<string>, что обеспечивает большую гибкость в типах, назначаемых свойству, и, таким образом, упрощает реализацию TypeConverter (который возвращает string[]).

public partial class MyControl : UserControl
{
    public static readonly DependencyProperty MyListProperty =
        DependencyProperty.Register(
            nameof(MyList),
            typeof(IList<string>),
            typeof(MyControl));

    [TypeConverter(typeof(StringListConverter))]
    public IList<string> MyList
    {
        get { return (IList<string>)GetValue(MyListProperty); }
        set { SetValue(MyListProperty, value); }
    }
}

public class StringListConverter : TypeConverter
{
    public override bool CanConvertFrom(
        ITypeDescriptorContext context, Type sourceType)
    {
        return sourceType == typeof(string);
    }

    public override object ConvertFrom(
        ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        return ((string)value).Split(
            new char[] { ',', ' ' },
            StringSplitOptions.RemoveEmptyEntries);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...