2013-10-26 60 views
0

我正在使用ComboBox超過2天,但沒有找到解決方案。Combobox沒有顯示任何項目,但是當我選擇任何項目時,我收到一些數據

在我的一個問題中,名爲JnJnBoo的用戶試圖回答我的問題,並從那裏獲得了一些知識和代碼。

我想在使用MVVM模式的多列中的組合框中顯示一些數據。 我正在使用實體框架和SQL Server數據庫。

下面是代碼:

namespace ERP_Lite_Trial.ViewModels 
{ 
    public class GroupsViewModel : INotifyPropertyChanged 
    { 
     public GroupsViewModel() 
     { 
      using (DBEntities db = new DBEntities()) 
      { 
       GroupsAndCorrespondingEffects = (from g in db.Groups 
               select new GroupAndCorrespondingEffect 
                  { 
                   GroupName = g.Name, 
                   CorrespondingEffect = g.Type_Effect.Name 
                  } 
               ).ToList(); 

       EffectName = (from e in db.Type_Effect 
          select e.Name).ToList(); 
      } 
     } 

     private List<GroupAndCorrespondingEffect> _groupsAndCorrespondingEffects; 
     public List<GroupAndCorrespondingEffect> GroupsAndCorrespondingEffects 
     { 
      get 
      { 
       return _groupsAndCorrespondingEffects; 
      } 
      set 
      { 
       _groupsAndCorrespondingEffects = value; 
       OnPropertyChanged("GroupsAndCorrespondingEffects"); 
      } 
     } 

     private string _selectedGroup; 
     public string SelectedGroup 
     { 
      get 
      { 
       return _selectedGroup; 
      } 
      set 
      { 
       _selectedGroup = value; 
       OnPropertyChanged("SelectedGroup"); 
      } 
     } 

     private List<string> _effectName; 
     public List<string> EffectName 
     { 
      get 
      { 
       return _effectName; 
      } 
      set 
      { 
       _effectName = value; 
       OnPropertyChanged("EffectName"); 
      } 
     } 

     public void OnPropertyChanged(string PropertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(PropertyName)); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
    } 

    public class GroupAndCorrespondingEffect 
    { 
     public string GroupName; 
     public string CorrespondingEffect; 
    } 
} 

而XAML:

<ComboBox x:Name="cbUnder" ItemsSource="{Binding Path=GroupsAndCorrespondingEffects}" 
      IsEditable="True" SelectedItem="{Binding Path=SelectedGroup, Mode=TwoWay}" 
      TextSearch.TextPath="GroupName" Grid.Column="1" Grid.ColumnSpan="4" Grid.Row="3"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Path=GroupName}"/> 
       <TextBlock Text="{Binding Path=CorrespondingEffects}"/> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

我試過很多東西,但總是不成功。

我的Combobox沒有在其項目中顯示任何數據,但當我選擇組合框中的任何項目時,我在selectedGroup屬性中獲取了一些數據。數據是namespace.classname

所以我想我需要重寫GroupAndCorrespondingEffect類的Tostring方法。但它有兩個屬性。 XAML中的數據綁定以哪種格式預期我不知道的數據。那麼,如何重寫tostring方法?或者可能是我在我的代碼中犯了某種錯誤?

回答

1

你GroupAndCorrespondingEffect應該像下面

public class GroupAndCorrespondingEffect 
{ 
    public string GroupName; 
    { 
     get; 

     set; 
    } 
    public string CorrespondingEffect; 
    { 
     get; 

     set; 
    } 
} 

而且在你XAML

<TextBlock Text="{Binding Path=CorrespondingEffects}"/> 

屬性名稱是錯誤的它包含額外的s

所以它應該是

<TextBlock Text="{Binding Path=CorrespondingEffect}"/> 
+1

而是多種答案的,你可以編輯了自己的答案。 –

0
public class GroupAndCorrespondingEffect 
{ 
    public string GroupName; 
    public string CorrespondingEffect; 
} 

使公共變量組名和CorrespondingEffect作爲屬性

0

並在您的視圖模型更改屬性SelectedGroup的類型,像下面

private GroupAndCorrespondingEffect _selectedGroup; 
    public GroupAndCorrespondingEffect SelectedGroup 
    { 
     get 
     { 
      return _selectedGroup; 
     } 
     set 
     { 
      _selectedGroup = value; 
      OnPropertyChanged("SelectedGroup"); 
     } 
    } 
+0

謝謝。你是一個拯救生命的人。 – Khushi

相關問題