2009-09-05 177 views
40

如何將視圖模型屬性綁定到ListBox.SelectedItem屬性?MVVM:綁定到ListBox.SelectedItem?

我已經創建了一個簡單的MVVM演示來試圖找出這一個。我的視圖模型具有以下屬性:

private ObservableCollection<DisneyCharacter> p_DisneyCharacters; 
public ObservableCollection<DisneyCharacter> DisneyCharacters 
{ 
    get { return p_DisneyCharacters; } 

    set 
    { 
     p_DisneyCharacters = value; 
     base.FirePropertyChangedEvent("DisneyCharacters"); 
    } 
} 

private DisneyCharacter p_SelectedItem; 
public DisneyCharacter SelectedItem 
{ 
    get { return p_SelectedItem; } 

    set 
    { 
     p_SelectedItem = value; 
     base.FirePropertyChangedEvent("SelectedItem"); 
    } 
} 

我想將SelectedItem屬性綁定到列表框中選定的項目。下面是列表框中的XAML:

<ListBox ItemTemplate="{StaticResource MasterTemplate}" 
     ItemsSource="{Binding Path=DisneyCharacters}" 
     SelectedItem="{Binding Path=Selectedtem, Mode=TwoWay}" 
     HorizontalAlignment="Stretch" /> 

這裏是我的問題:視圖模型SelectedItem屬性當我改變列表框中選擇不會被更新。

我做了一個測試,我暫時用SelectedIndex屬性替換了視圖模型SelectedItem屬性,並將其綁定到ListBox.SelectedIndex屬性。該屬性更新正常 - 它只是我無法工作的SelectedItem屬性。

那麼,我該如何解決SelectedItem綁定?謝謝你的幫助。

+4

如何在MVVM中使用列表框的一個很好的例子。謝謝 – MrPurpleStreak 2011-06-07 20:31:50

回答

45

那麼,它就像生命一樣大。在XAML中。我綁定到視圖模型屬性「Selectedtem」。不幸的是,實際的名字是「SelectedItem」。所以這段代碼實際上有效 - 我在今天下午早些時候解決了這個問題,然後在下午的其餘時間和整個晚上在網上搜索,然後才發現拼寫錯誤。

我的妻子今天下午3點告訴我,「你知道,事情會變得很小。」就這樣 - 一封丟失的信件「我」。那麼,至少我現在可以去睡覺了。

+50

爲了幫助你更快地發現這些問題,如果你調試你的應用程序,你應該會在Visual Studio的輸出窗口中看到一個WPF綁定錯誤,表明屬性「Selectedtem」不存在。希望這能幫助你在未來更快地追蹤這類錯誤。 – Andy 2009-09-06 03:01:27

+1

我希望我在一年前開始Silverlight開發時知道輸出窗口中的綁定錯誤。當你開始認爲你是一個體面的開發人員... – BoxerBucks 2011-08-26 19:12:38

+0

@BoxerBucks,我不認爲你得到**任何**通知或日誌失敗綁定在SilverLight。 – Sam 2012-11-06 00:58:01