2014-02-10 45 views
1

我有一个函数,获取3个列表中的字符串里面。我已经使用ObservableCollection来保存这3个列表。绑定DataGrid和ObservableCollection在C#

这是的ObservableCollection的定义:

public partial class CreateAreaDialogWindow : System.Windows.Window 
    { 
     ObservableCollection<Tuple<string, string, string>> _obsCollection = new ObservableCollection<Tuple<string, string, string>>(); 

    } 

与方法,我做了我正在写一些DataGrid的结果添加列表之后。数据网格的定义是这样的:在我有3个栏目与复选框3分不同的列

<DataGrid Grid.Column="0" AutoGenerateColumns="True" Height="206" HorizontalAlignment="Left" Margin="12,265,0,0" Name="tabela" VerticalAlignment="Top" Width="556" SelectionChanged="tabela_SelectionChanged" Grid.RowSpan="2" ItemsSource="Binding _obsCollection"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Type" Binding="{Binding Item1}"/> 
       <DataGridTextColumn Header="MapTo" Binding="{Binding Item2}"/> 
       <DataGridTextColumn Header="Name" Binding="{Binding Item3}"/> 
       <DataGridCheckBoxColumn Header="Controller"/> 
       <DataGridCheckBoxColumn Header="Service"/> 
       <DataGridCheckBoxColumn Header="Injection"/> 
      </DataGrid.Columns> 
     </DataGrid> 

除了3列出的字符串。问题是我不知道如何以正确的方式进行绑定。 例如,如果我把这个线在我的代码:

tabela.ItemsSource = _obsCollection; 

我得到6列,而不是3,当然他们有相同的内容:那些3我从XAML代码获得(在这种情况下结合的作品)和3是从该行:tabela.ItemsSource = _obsCollection;

当我删除:tabela.ItemsSource = _obsCollection;我收到一个空的表格与复选框。 所以我知道问题出在绑定错误,但有人有一个想法如何编辑此代码,所以我可以删除:tabela.ItemsSource = _obsCollection;,仍然得到3列与列表内容和列标题:类型,MapTo和名称?

+0

当然也有6列。您在XAML中创建了6列。 – Kcvin

+0

我的意思是9列,其中有6个文字,我只需要3个文字和3个复选框。没有告诉过这个故事:) –

回答

3

所有您需要的是设置AutoGenerateColumns="False"和创造这样MyViewModel将作为您的DataContext

试试下面的代码:

public partial class MainWindow : Window 
    { 

     public MainWindow() 
     { 
      InitializeComponent(); 
      this.DataContext = new MyViewModel(); 
     } 
    } 
    public class MyViewModel 

    { 
      public MyViewModel() 
      { 
       for (int i = 0; i < 1; i++) 
       { 
        _obsCollection.Add(new Tuple<string, string, string>("Test" + i, "Test2" + i, "Test3" + i)); 
       } 
      } 
     ObservableCollection<Tuple<string, string, string>> _obsCollection = new ObservableCollection<Tuple<string, string, string>>(); 

     public ObservableCollection<Tuple<string, string, string>> MyObsCollection 
     { 
      get { return _obsCollection; } 

     } 
    } 
+0

谢谢你,我会马上试试:) –

相关问题