2011-05-05 135 views
3

我試圖選擇一個組合框項來設置數據庫中保存的值。轉換爲Silverlight中的組合框4

在數據庫中它保存爲「I」或「D」,轉換器返回「直接」或「間接」。

ComboBox具有兩個帶有「直接」和「間接」值的ComboBoxItems。

這是我認爲它會工作代碼:

<ComboBox Name="cbMode" 
SelectedValue="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" > 
     <ComboBoxItem Content="Direct" /> 
     <ComboBoxItem Content="Indirect" /> 
</ComboBox> 

我知道它返回「間接」,但它沒有被選中。

當我嘗試更改組合中的選定項目時,它不起作用,因爲它無法從ComboBoxItem轉換爲字符串,所以我支持這兩個方法都是問題。

我該如何嘗試?我必須使用數字轉換器創建SelectedIndex嗎?

在此先感謝。

回答

0

最後我用了一個不太酷的解決方案(但比其他選項更好)。

我這樣綁定所選項目:

<ComboBox Name="cbMode" 
SelectedIndex="{Binding Context.mode, Converter={StaticResource ModeConverter}, Mode=TwoWay}" > 
     <ComboBoxItem Content="Direct" /> 
     <ComboBoxItem Content="Indirect" /> 
</ComboBox> 

而只是改變了轉換器返回0,如果它是一個d和1,如果如果你找到一個更好的解決方案,這是一個一

請告訴我 ;-)。

+0

您在這裏遇到的問題是您的用戶界面完全是靜態的。如果你需要能夠添加第三個狀態到「模式」會怎麼樣?我建議至少在您的虛擬機中添加一個Key/Value對的ObservableCollection,並按照John Pappa博客鏈接中顯示的方式將ItemsSource綁定到該對象。那麼你不需要一個轉換器,如果你需要進一步將它從VM中分離出來以便更好的重用,你的ObservableCollection可以被移動到一個PickListProvider類型的對象。 – 2011-06-20 20:07:52

0

http://johnpapa.net/binding-to-silverlight-combobox-and-using-selectedvalue-selectedvaluepath-and-displaymemberpath

創建一個代表在列中的「物」(是模式?),然後用公式上面的博客文章綁定到它的對象。 Mode類將具有表示類型的屬性。

如果Context.mode的值爲null,我遇到了綁定到常規ComboBox控件的問題。它打破了綁定。像Tereik的第三部分組合框將解決這個問題。幸運的是SL5會有這個固定的。

+0

Mode是datacontext對象(字符串)中的一個屬性。我認爲問題是在組合框的項目類型... – zapico 2011-05-06 07:19:19

0

我通常嘗試在我的數據庫訪問層中攔截這樣的問題。數據庫受到應用程序開發方的限制。當你得到你的數據時,我會從I/D轉換爲間接/直接。當你設置你的數據時,我只是將其取消。允許您針對有意義的代碼編寫應用程序。

有些人稱之爲應用程序中心編碼,這讓我的生活變得非常容易。

+0

我認爲這是不適用於任何情況下(這是我的情況)。無論如何感謝您的回覆。 – zapico 2011-05-06 07:17:57