c# – WPF在DataGrid中绑定到DataContext
发布时间:2020-12-15 08:32:17 所属栏目:百科 来源:网络整理
导读:我有一些问题将datagrid组合框ItemsSource映射到主datacontext. 这是一些显示问题的演示代码. 我的课程 public class MyData{ public string Name { get; set; } public string Priority { get; set; }} 我创建了一个连接到数据上下文的类,它看起来像这样 pu
我有一些问题将datagrid组合框ItemsSource映射到主datacontext.
这是一些显示问题的演示代码. 我的课程 public class MyData { public string Name { get; set; } public string Priority { get; set; } } 我创建了一个连接到数据上下文的类,它看起来像这样 public class myMV { public ObservableCollection<MyData> MyItems { get; set; } public List<string> PriorityTypes { get { return new List<string> { "High","Normal","Low" }; } } public myMV() { this.MyItems = new ObservableCollection<MyData> { new MyData { Name = "item1",Priority = "Low" },new MyData { Name = "item2",Priority = "Normal" },Priority = "High" } }; } } 然后我创建并将其分配给MainWindows()中的数据上下文 public MainWindow() { InitializeComponent(); this.DataContext = new myMV(); } 在xaml方面,我创建了一个简单的数据网格,试图像这样展示. <DataGrid Grid.Row="1" ItemsSource="{Binding MyItems}" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="Title" Binding="{Binding Name}" Width="*"></DataGridTextColumn> <DataGridComboBoxColumn Header="Priority" SelectedItemBinding="{Binding Priority}" ItemsSource="{Binding PriorityTypes,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}}}"/> </DataGrid.Columns> </DataGrid> 它没有将Combobox ItemsSource映射到DataContext.PriorityTypes 我也试过(使用相同的亲属)来做DataContext.PriorityTypes而没有运气. 这是我的问题的简化示例,但关键部分是PriorityType必须是List,所以我不能枚举. 任何人都知道如何修复此绑定? 解决方法
我相信你遇到的问题与DataGridComboBoxColumn进行数据绑定有关 – 基于跟踪消息,你根本无法访问父级.将该列替换为使用DataTemplate的列:
<DataGridTemplateColumn Header="Priority" Width="100"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <ComboBox SelectedItem="{Binding Priority}" ItemsSource="{Binding DataContext.PriorityTypes,AncestorType=Window}}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 您甚至可以使用单独的模板进行显示…… <DataGridTemplateColumn Header="Priority" Width="100"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Label Content="{Binding Priority}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> <DataGridTemplateColumn.CellEditingTemplate> <DataTemplate> <ComboBox SelectedItem="{Binding Priority}" ItemsSource="{Binding DataContext.PriorityTypes,AncestorType=Window}}" /> </DataTemplate> </DataGridTemplateColumn.CellEditingTemplate> </DataGridTemplateColumn> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |