wpf - MVVM - ListBox SelectedItem 绑定(bind)属性变为空

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

我将其包含在我的 View 模型中:
    public ObservableCollection<MenuItem> MenuItems
    {
        get
        {
            return menuitems;
        }
        set
        {
            menuitems = value;
            NotifyPropertyChanged("MenuItems");
        }
    }
    public MenuItem SelectedItem
    {
        get
        {
            return selecteditem;
        }
        set
        {
            selecteditem = value;
            NotifyPropertyChanged("SelectedItem");
        }
    }

也在我的 View 模型中:
    public void UpdateStyle()
    {
        ActiveHighlight = SelectedItem.HighlightColor;
        ActiveShadow = SelectedItem.ShadowColor;
    }

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

任何人都可以帮忙吗?

谢谢

编辑:
我想我可能会更清楚一点。
1. 单击列表中的一个项目
2. SelectedItem.Set 被触发,ViewModel.SeletedItem 被正确设置。
3. 在 .CS 文件中输入 OnSelectionChanged 事件。
4.进入ViewModel.UpdateStyle()
5. SelectedItem 抛出空异常。

最佳答案

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

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

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

无论如何,谢谢,伙计们。

关于wpf - MVVM - ListBox SelectedItem 绑定(bind)属性变为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2918099/

相关文章:

WPF 从 UserControl 打开模态窗口

wpf - 使用 LINQ XML 绑定(bind)组合框

Kotlin Dagger 2 在 Activity 和 Fragment 之间共享 ViewModel

c - 使用 tolua++ 绑定(bind)结构和 ctor/dtor

c# - 如何识别数据表的修改单元格?

wpf - ObjectDataProvider 标记中的引用嵌套类型

design-patterns - MVVM Light DI 在虚拟机之间共享数据?

silverlight - 我可以从我现有的 MVVM 代码创建一个不包含 Silverlight 的移动 'view' 吗?

javascript - 使用 node-sqlite3 将变量绑定(bind)到 SQL 语句

java - 绑定(bind)到 c# 一些使用 .so 库的 java 代码