Проверено ListBox (WPF) - PullRequest
       8

Проверено ListBox (WPF)

3 голосов
/ 15 ноября 2011

Я не могу получить проверенный ListBox для работы.

Мой бизнес-объект (это частный / вложенный класс, следовательно, в нижнем регистре)

    class shop : System.ComponentModel.INotifyPropertyChanged
    {
        internal int id;
        string _name;
        internal string name
        {
            get { return _name; }
            set
            {
                _name = value;
                if (PropertyChanged != null) PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("name"));
            }
        }

        bool _selected;
        internal bool selected
        {
            get { return _selected; }
            set
            {
                _selected = value;
                if (PropertyChanged != null) PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs("selected"));
            }
        }
    }

Мой XAML:

<ListBox ItemsSource="{Binding}" Grid.Row="1" HorizontalAlignment="Stretch" Margin="10,0,10,0" Name="lbSelectedShops" VerticalAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <CheckBox Width="Auto" Content="{Binding Path=name}" IsChecked="{Binding Path=selected, Mode=TwoWay}"/>
        </DataTemplate>
    </ListBox.ItemTemplate>                                
</ListBox>

Привязка данных в коде очень проста:

lbSelectedShops.ItemsSource = _shops;

, где _shops - это ObservableCollection<shop> (содержащий два элемента).

Что яget - это два пустых флажка в списке (без заголовков, и оба сняты, даже если для selected установлено значение true для всех элементов в ItemsSource).

Я уже очень расстроен и уверен, что это должно быть что-то очень тривиальное.Что здесь не так?

Ответы [ 2 ]

3 голосов
/ 15 ноября 2011

Обязательная работа только с публичными свойствами (и публичными классами)

3 голосов
/ 15 ноября 2011

Это не работает, потому что ваши свойства являются внутренними, и для привязки данных вам нужны открытые свойства.
Из MSDN ( Обзор источников привязки ):

Вы можете привязать к общедоступнымсвойства, подсвойства, а также индексаторы любого общеязыкового объекта среды выполнения (CLR).Механизм привязки использует CLR-отражение для получения значений свойств.Альтернативно, объекты, которые реализуют ICustomTypeDescriptor или имеют зарегистрированный TypeDescriptionProvider, также работают с механизмом привязки.

...