我有一个函数可以获得一些包含字符串的3个列表。我已经使用ObservableCollection将这3个列表保留在其中。
这是ObservableCollection的定义:
public partial class CreateAreaDialogWindow : System.Windows.Window
{
ObservableCollection<Tuple<string, string, string>> _obsCollection = new ObservableCollection<Tuple<string, string, string>>();
}
使用我已经制作的方法添加列表后,我在一些DataGrid中编写结果。 DataGrid的定义是这样的:
<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个不同列中的3个字符串列表之外,我还有3个带复选框的列。问题是我不知道如何以正确的方式进行绑定。 例如,如果我把这一行放在我的代码中:
tabela.ItemsSource = _obsCollection;
我得到6列而不是3列,当然它们有相同的内容:我从XAML代码获得的3个(在这种情况下绑定有效),3个来自该行:tabela.ItemsSource = _obsCollection;
当我删除时:tabela.ItemsSource = _obsCollection;
我得到一个带有复选框的空表。
所以我知道问题在于绑定错误,但有人知道如何编辑此代码以便我可以删除:tabela.ItemsSource = _obsCollection;
并仍然获得包含列表内容和列标题的3列:Type,MapTo和Name?
答案 0 :(得分: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; }
}
}