所以我有一个列表框:
<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/