MVVM - ListBox SelectedItem绑定属性为空

时间:2010-05-27 02:24:41

标签: wpf mvvm binding listbox

所以我有一个列表框:

<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>

我将其包含在我的viewmodel中:

    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;
    }

因此,目标是每当触发selectedchanged事件时调用UpdateStyle()。所以在.CS文件中,我调用UpdateStyle()。 问题是,每当我进入selectionchanged事件方法时,我的ViewModel.SelectedItem始终为null。 我尝试调试它以查看绑定是否正常工作,确实如此。当我单击列表框中的某个项目时,会触发SelectedItem集合,设置值...但介于其中的某个位置和所选的已更改(在CS文件中)它将重置为Null。

任何人都可以帮忙吗?

谢谢

编辑: 我以为我可能会多点亮一点。 1.单击列表中的项目 2. SelectedItem.Set被触发,ViewModel.SeletedItem被正确设置。 3.在.CS文件中输入OnSelectionChanged事件。 4.输入ViewModel.UpdateStyle() 5. SelectedItem抛出空例外。

2 个答案:

答案 0 :(得分:2)

哇,发现了一个奇怪的问题:

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

该代码由Expression Blend生成 - 它导致了问题。我删除了所有生成的绑定,只是在XAML的构造函数中创建了一个this.datacontext一个新的VM ...现在它正在工作。

无论如何,谢谢你们。

答案 1 :(得分:0)

查看代码中某处的后备属性(selecteditem)是否设置为NULL。