我想创建一个DataGrid,它将显示我的List中的数据:
public List<HeaderTagControlsPair> HeaderTagControlsPairList = new List<HeaderTagControlsPair>();
这是我的班级HeaderTagControlsPair
:
public class HeaderTagControlsPair
{
public TextBlock HeaderTextBlock = new TextBlock
{
Margin = new System.Windows.Thickness(10,10,10,10)
};
public ComboBox TagComboBox = new ComboBox();
public RadioButton TimeRadioButton = new RadioButton
{
GroupName = "TimeRadioButtons",
HorizontalAlignment = HorizontalAlignment.Center
};
}
所以,我希望我的DataGrid将列表中的每个项目显示为新记录。正如你在我的班级中看到的,每条记录应该有:textBlock,ComboBox和RadioButton。
我尝试了以下内容:
DataGrid MainDataGrid = new DataGrid();
MainDataGrid.ItemsSource = settings.HeaderTagControlsPairList;
this.Content = MainDataGrid; //display MainDataGrid in the window
不幸的是我得到没有记录的空窗口。
如果可能的话,我想从C#中的代码隐藏中完成整个思考。我真的不懂XAML。但如果您认为应该在XAML中完成 - 我会这样做。
答案 0 :(得分:1)
您需要做很多事情才能按照自己的方式进行操作。 MVVM设计模式,DataGrid
控件,数据绑定,INotifyPropertyChanged
接口,仅举几例。
首先,您不将Controls
绑定到DataGrid
,您将绑定数据。下面显示的是XAML对于DataGrid
控件的外观:
<DataGrid ItemsSource="{Binding Path=HeaderTagControlsPairList}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Header" Binding="{Binding Path=Header}"/>
<DataGridComboBoxColumn Header="Tag" ItemsSource="{Binding Path=Tags}"/>
<DataGridCheckBoxColumn Header="Time" Binding="{Binding Path=Time}"/>
</DataGrid.Columns>
</DataGrid>
ItemsSource
的{{1}}应绑定到DataGrid
个对象列表。此列表必须位于实现HeaderTagControlsPair
接口的类中,以便在INotifyPropertyChanged
中正确显示和更新数据。
DataGrid
类本身看起来像这样:
HeaderTagControlsPair
它将包含数据,而不是控件。显示此数据的实际控件在上面的XAML中的public class HeaderTagControlsPair
{
public string Header { get; set; }
public List<string> Tags { get; set; }
public bool Time { get; set; }
}
列中定义。
此示例未完成,因为您需要正确设置并实现包含DataGrid
的类。您需要进行一些研究,以便了解其工作原理。对上面提到的主题进行一些阅读将为您提供正确实施所需的背景知识,并了解为什么需要所有额外步骤。