2015-05-19 22 views
0

我是C#的新手,我嘗試使用MVVM模式創建代碼,但我不知道如何使用該模式填充組合框。請給我幫助來創建ViewModel和xaml的綁定。如何填充使用MVVM訪問的組合框

代碼模型:

public int Cd_Raca 
    { 
     get; 
     set 
     { 
      if(Cd_Raca != value) 
      { 
       Cd_Raca = value; 
        RaisePropertyChanged("Cd_Raca"); 
      } 
     } 
    } 

    public string Nm_Raca 
    { 
     get; 
     set 
     { 
      if(Nm_Raca != value) 
      { 
       Nm_Raca = value; 
        RaisePropertyChanged("Nm_Raca"); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaisePropertyChanged(string property) 
    { 
     if(PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 

的XAML:

<ComboBox x:Name="dsCmbRaca" HorizontalAlignment="Left" Margin="438,4,0,0" 
          VerticalAlignment="Top" Width="94" Height="19"/> 

回答

0

使用ItemsSource屬性並將其設置爲對象的枚舉。使用DisplayMemberPath,如果列表不只是字符串列表,則可以將其設置爲列表中單個對象的屬性。
I.e.在我的示例中,列表的對象具有用於顯示的Description屬性和用於所選值的Value屬性。

樣本中的所有綁定都需要是ViewModel(= DataContext)中的一個屬性。

<ComboBox DisplayMemberPath="Description" HorizontalAlignment="Left" 
        VerticalAlignment="Top" Width="120" 
        ItemsSource="{Binding myList}" 
        SelectedValue="{Binding mySelectedValue}" SelectedValuePath="Value" /> 

編輯:
列表屬性看起來是這樣的:

public IList<MyObject> myList { get { return new List<MyObject>();} } 

的對象可能看起來像這樣的例子:

public class MyObject 
{ 
    public string Description { get; } 
    public enum Value { get;} 
} 

對象是可選的。你可以傳遞一個字符串列表。

聲明:我在記事本中黑了。我希望它編譯。

UPDATE
至少從您發佈的屬性看你的代碼沒有正確實現。

private int _cd_Raca; 
private string _nm_Raca; 

public int Cd_Raca 
    { 
     get{ return _cd_Raca;} 
     set 
     { 
      if(_cd_Raca != value) 
      { 
       _cd_Raca = value; 
        RaisePropertyChanged("Cd_Raca"); 
      } 
     } 
    } 

    public string Nm_Raca 
    { 
     get{return _nm_Raca;} 
     set 
     { 
      if(_nm_Raca != value) 
      { 
       _nm_Raca = value; 
        RaisePropertyChanged("Nm_Raca"); 
      } 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaisePropertyChanged(string property) 
    { 
     if(PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 

閱讀您的評論我的第一個答案似乎你可能有一個具體的使用情況:如果你喜歡你的代碼它,你需要一個支持字段。所以如果這個更新沒有幫助,也許你可以添加更多的信息到你的問題。

+0

我試圖實現,但沒有奏效。我想用Access數據庫表填充組合框。 DisplayMember需要是「Nm_Raca」,「ID」是「Cd_Raca」。 –

+0

如果它解決了您的問題,請參閱我的更新。如果不是,請提供一些關於您的問題的更多信息,以及當您嘗試我的解決方案時您的問題是什麼。 – Uwe

+0

我做了這個,但問題是我不知道我在哪裏連接到數據庫 –