2010-05-27 42 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

相關問題