2011-06-01 67 views
0

我已經嘗試過似乎一輩子得到這個問題排序,但不幸的是沒有用,即使在搜索stackoverflow和其他網站。XAML組合框SelectedIndex綁定到ViewModel屬性

我試着讓我的問題簡短,但重點。

使用WPF和MVVM方法我有:View和ViewModel。

從視圖內部XAML我將一個comboBox綁定到鍵/值字典對象中的值列表。這工作正常 - 當我點擊組合框時,我能夠看到值下降。

注意:每個記錄在顯示組合框的gridview中可以有多個分期安裝。

<dxg:GridColumn Header="Instalments" 
     Width="100" 
     AllowSorting="False" 
     AllowAutoFilter="False"> 
<dxg:GridColumn.CellTemplate> 
<DataTemplate> 
    <ComboBox IsEnabled="{Binding Data.IsIncludedInDD}" 
       Name="cbInstalmentValues" 
       Width="200" 
       ItemsSource="{Binding Data.D_InstalmentValues}" 
       SelectedIndex="{Binding Data.Instalments, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
       DisplayMemberPath="Value" 
       SelectedValuePath="Key" 
       SelectedValue="{Binding SelectedInstalmentValue, Mode=TwoWay, ValidatesOnDataErrors=True, NotifyOnValidationError=True, UpdateSourceTrigger=PropertyChanged}" 
       VerticalAlignment="Center" /> 

代碼:

private static readonly Dictionary<int, string> D_instalmentValues = new Dictionary<int, string> 
{ 
    {0, "None"}, 
    {1, "1 Instalment"}, 
    {2, "2 Instalments"}, 
    {3, "3 Instalments"}, 
    {4, "4 Instalments"}, 
    {5, "5 Instalments"}, 
    {6, "6 Instalments"}, 
    {7, "7 Instalments"}, 
    {8, "8 Instalments"}, 
    {9, "9 Instalments"}, 
    {10, "10 Instalments"}, 
    {11, "11 Instalments"}, 
    {12, "12 Instalments"} 
}; 

public Dictionary<int, string> D_InstalmentValues 
{ 
    get 
    { 
    return _instalmentValues; 
    } 
    set 
    { 
    _instalmentValues = value; 
    } 
} 

So..when我加載了我的應用我想下拉框中讀取來自「分期付款」屬性的值在視圖模型並結合到的相同的索引字典中的值,並顯示期數..即:無,1批等。

public int Instalments 
{ 
    get 
    { 
     return _chargeTemplate.Instalments; 
    } 

    set 
    { 
    if (value == -1) 
    { 
     value = value + 1; 
     _chargeTemplate.Instalments = _chargeTemplate.Instalments; 
    } 
    else 
    { 
     if (_chargeTemplate.Instalments == value) 
     { 
      return; 
     } 
     else 
     { 
      _chargeTemplate.Instalments = value; 
     } 
    } 
    //NotifyNotRegister("Instalments"); 
    RaisePropertyChanged("Instalments"); 
    } 
} 

現在「_chargeTemplate.Instalments」值保持從RECO分期付款列中的值在數據庫中的rd。

如果分號屬性中的值爲0,則組合框似乎不會綁定。該框爲空。

後,我選擇具有大於0

,當我試圖填充所有分期付款領域,從1值的SQL表12所選擇的指數都沒有設置一個值的記錄它得到填充正確地顯示在我的應用程序中顯示的第一條記錄,但如果我選擇了下一條記錄,則顯示爲OK ...然後,如果我再次重新選擇了第一條記錄,它也會正確顯示。

行爲的另一個奇怪的部分是對於第一條記錄,如果我有3分期付款,並在SQL表分期1 = 2,分期付款2 = 4和分期付款3 = 0 ...的前兩個分期付款記錄的組合框索引已設置,但最後一條記錄爲空。

總結 - 當應用程序加載時,我需要知道如何將選定索引從視圖模型綁定到視圖,而組合框對於第一條記錄或所選索引爲0的值爲空。

我希望在這裏有足夠的信息...

非常感謝

UPDATE:

我做了一個小改動,XAML和財產即我綁定的組合框的selectedIndex 。這允許0值在組合框中顯示「無」,其中值爲0的人員安裝值在sql數據庫中。

但是,顯示在記錄列表中的第一個人沒有將選定索引設置爲字典值的索引,除非我選擇另一個人並重新選擇第一個人......奇怪

視圖模型

公衆詮釋分期付款 { 得到 { 回報_chargeTemplate.Instalments; }}

XAML

的SelectedIndex = 「{結合Data.Instalments,模式=單向}」

回答

3

我找到了答案盯着屏幕了一下後,最終並意識到我已經放棄了1 WORD !!!!

我完全從組合框控件中刪除了'SelectedIndex'屬性,而是使用'SelectedValue'。前面缺少的詞是'數據'。

隨着在視圖模型這個工作一種享受從數據庫組合框顯示正確的值上加載應用程序下面

參見:)

感謝性質的一些調整!

的DisplayMemberPath = 「值」 SelectedValuePath = 「密鑰」 的SelectedValue = 「{結合Data.SelectedInstalmentValue,模式=雙向,ValidatesOnDataErrors =真,NotifyOnValidationError =真,UpdateSourceTrigger =的PropertyChanged}」 形式=「{ StaticResource ValidationStyle}「 VerticalAlignment =」Center「/>

+1

+1 for posting solution :) – dain 2011-06-02 15:58:29

相關問題