MVVM - свойство привязки ListBox SelectedItem становится пустым - PullRequest
2 голосов
/ 27 мая 2010

Итак, у меня есть список:

<ListBox x:Name="listbox" HorizontalAlignment="Left" Margin="8,8,0,8" Width="272" BorderBrush="{x:Null}" Background="{x:Null}" Foreground="{x:Null}" ItemsSource="{Binding MenuItems}" ItemTemplate="{DynamicResource MenuItemsTemplate}" SelectionChanged="ListBox_SelectionChanged" SelectedItem="{Binding SelectedItem}">

</ListBox>

и я включил это в мою модель просмотра:

    public ObservableCollection<MenuItem> MenuItems
    {
        get
        {
            return menuitems;
        }
        set
        {
            menuitems = value;
            NotifyPropertyChanged("MenuItems");
        }
    }
    public MenuItem SelectedItem
    {
        get
        {
            return selecteditem;
        }
        set
        {
            selecteditem = value;
            NotifyPropertyChanged("SelectedItem");
        }
    }

а также в моей viewmodel:

    public void UpdateStyle()
    {
        ActiveHighlight = SelectedItem.HighlightColor;
        ActiveShadow = SelectedItem.ShadowColor;
    }

Итак, цель состоит в том, чтобы вызывать UpdateStyle () всякий раз, когда выбрано выбранное событие. Поэтому в файле .CS я вызываю UpdateStyle (). Проблема заключается в том, что всякий раз, когда я вхожу в метод события selectionbreak, мой ViewModel.SelectedItem всегда равен нулю. Я попытался отладить это, чтобы увидеть, работает ли привязка правильно, и это так. Когда я нажимаю на элемент в списке, запускается SelectedItem Set, устанавливая значение ... но где-то между этим и выбранным измененным (в CS-файле) он сбрасывается в Null.

Может кто-нибудь помочь?

Спасибо

Edit: Я думал, что мог бы пролить немного больше света. 1. Нажмите на элемент в списке 2. SelectedItem.Set срабатывает, ViewModel.SeletedItem устанавливается правильно. 3. Введите Событие OnSelectionChanged в файл .CS. 4. Введите ViewModel.UpdateStyle () 5. SelectedItem выбрасывает нулевое исключение.

Ответы [ 2 ]

2 голосов
/ 27 мая 2010

Ух, нашел странную проблему:

<Grid x:Name="LayoutRoot" DataContext="{Binding Source={StaticResource MainViewModelDataSource}}" d:DataContext="{d:DesignData /SampleData/MainViewModelSampleData.xaml}">

Этот код сгенерирован Expression Blend - и это стало причиной проблемы. Я стер все сгенерированное связывание и просто сделал this.datacontext новой виртуальной машиной в конструкторе XAML ... теперь он работает.

Спасибо, ребята.

0 голосов
/ 27 мая 2010

Посмотрите, не установлено ли где-либо в вашем коде свойство поддержки (selecteditem) в NULL.

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