所以我有一个列表框:
<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抛出空例外。
答案 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。