Как связать ItemsSource с частной собственностью - PullRequest
8 голосов
/ 05 сентября 2011

Как связать WPF ItemsSource с частной собственностью?

<ComboBox x:Name="xxx" ItemsSource="{Binding Items, Mode=OneWay}"
          DisplayMemberPath="ItemName"/>
public partial class ItemBuySellAddEdit : BasePage
{
    private List<Item> Items { get; set; }
}

Список элементов будет заполняться при загрузке формы.

Ответы [ 4 ]

20 голосов
/ 05 сентября 2011

Привязка данных в WPF работает только с открытыми свойствами.

MSDN :

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

3 голосов
/ 29 августа 2014

Если вы действительно хотите это сделать, вам придется предоставить собственный дескриптор типа, реализовав ICustomTypeDescriptor - который предоставляет дополнительное свойство через пользовательский PropertyDescriptor наряду с обычными общедоступными свойствами.Вы можете реализовать этот интерфейс для самого типа или через TypeDescriptionProvider;последний предпочтителен, так как он работает в большем количестве сценариев (например, пустые списки, без необходимости также предоставлять пользовательский список с реализацией ITypedList).Это много работы, и это действительно не стоит этого, кроме крайних случаев.Но это можно сделать.

2 голосов
/ 05 сентября 2011

Это невозможно, если хотите, вы можете использовать internal.

... и используйте ObservableCollection<T> и не забудьте установить DataContext для представления.

1 голос
/ 09 ноября 2012

Вам нужна привязка Относительного источника, сейчас ваша привязка относится к DataContext вашего ItemBuySellAddEdit (FrameworkElement) Atleast, который является моим Impression, потому что вы используете partial. Если это ViewModel, проверьте окно вывода и посмотрите, нет ли ошибок привязки.

<ComboBox 
    x:Name="xxx" 
    ItemsSource="{Binding Items, 
        RelativeSource={RelativeSource AncestorType={x:Type ItemBuySellAddEdit}},
        Mode=OneWay}"
    DisplayMemberPath="ItemName"/>

Но Ответ от Стефана Бауэра по-прежнему применяется.

Также примите во внимание ответ WaltiD, если вы хотите, чтобы новые элементы в этом списке отображались автоматически.

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