2010-05-27 69 views
2

所以我有一个列表框:MVVM - ListBox中的SelectedItem绑定属性去空

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

,并在我的视图模型:

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

因此,目标是每当selectedchanged事件被触发时调用UpdateStyle()。所以在.CS文件中,我调用UpdateStyle()。 问题是,每当我进入selectchanged事件方法,我的ViewModel.SelectedItem始终为空。 我试着调试,看看绑定是否正常工作,它是。当我点击列表框中的一个项目时,SelectedItem集合被触发,设置值...但是在选定的区域和选定的区域之间改变(在CS文件中)它被重置为Null。

任何人都可以帮忙吗?

感谢

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

+0

以前有人问过类似的问题可以帮助你。 http://stackoverflow.com/questions/414074/twoway-manual-binding-implementation-for-listbox-selecteditems – jsmith 2010-05-27 02:39:44

回答

2

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

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

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

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

+0

该代码仅在设计时提供样本数据。这非常方便。我知道,因为我删除它也是为了解决某些问题,然后才意识到它是什么和做了什么。代码隐藏中应该有代码设置运行时的数据上下文。 – 2013-09-14 21:20:47

0

查看您的支持属性(selecteditem)是否在您的代码的某处设置为NULL。

+0

不 - 唯一的地方SelectedItem正在使用是在UpdateStyle和绑定。 – Peanut 2010-05-27 02:40:13

+0

我的意思是小写selecteditem,它在哪里设置,它与SelectedItem不一样。 – Zamboni 2010-05-27 04:01:46

相关问题