【发布时间】:2021-08-01 03:00:21
【问题描述】:
我有一个绑定到可观察集合的 DataGrid。在这个 DataGrid 中,我有两个组合框(在其他列中)。其中一列是任务,第二列是进度。 我想要实现的是第二个下拉列表(进度)的项目源,将根据第一个下拉列表(任务)的值进行更新。 这是我到目前为止所做的:
<Window.Resources>
<ObjectDataProvider x:Key="EngTaskEnum"
MethodName="GetValues"
ObjectType="{x:Type core:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="Sources:EngTask"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<DataGrid x:Name="DataGrid_tbl"
ItemsSource="{Binding}"
AutoGenerateColumns="False"
AlternatingRowBackground="LightBlue"
CanUserAddRows="True"
CanUserResizeColumns="False"
CanUserReorderColumns="False"
CanUserResizeRows="False"
CanUserSortColumns="False"
SelectionMode="Single"
CellEditEnding="DataGrid_tbl_CellEditEnding"
PreparingCellForEdit="DataGrid_tbl_PreparingCellForEdit">
<DataGrid.Columns>
<!--Task-->
<DataGridComboBoxColumn SelectedItemBinding="{Binding EngTask}"
ItemsSource="{Binding Source={StaticResource EngTaskEnum}}"
Header="Task"
Width="Auto"
MinWidth="120"/>
上面显示的是(任务)栏,进度栏也是如此。这就是我在代码隐藏上尝试的:
private void DataGrid_tbl_PreparingCellForEdit(object sender, DataGridPreparingCellForEditEventArgs e)
{
if(e.Column.Header.ToString() == "Progress")
{
switch (_taskSelected)
{
case"Software":
e.EditingEventArgs.Source = Enum.GetValues(typeof(SoftProgress));
break;
case "Hardware":
e.EditingEventArgs.Source = Enum.GetValues(typeof(HardProgress));
break;
}
}
}
我几乎可以肯定,这很可能不是正确的方法,但我一直在尝试找出不同的方法,看看哪些方法可行。请如果有人可以提供一些输入将不胜感激。 谢谢!
【问题讨论】:
标签: c# wpf visual-studio xaml datagrid