WPF DataGridComboBoxColumn 绑定
WPF DataGridComboBoxColumn binding
我在尝试使用 DataGridComboBoxColumn 更新我的 entity framework
时遇到了一些问题
我有一个绑定到自定义模型 (FunctionPrinterLookupModel) 的数据网格,它基本上是建筑物周围打印机和函数之间的查找。功能都是静态的,但我希望用户能够 select 他们使用哪台打印机来实现功能。
<DataGrid Grid.Row="1" x:Name="gridLookup" AutoGenerateColumns="False" Width="500" RowEditEnding="gridLookup_RowEditEnding" Margin="20">
<DataGrid.DataContext>
<Models:Printer/>
</DataGrid.DataContext>
<DataGrid.Columns>
<DataGridTextColumn Header="Function" Width="*" IsReadOnly="True" Binding="{Binding FunctionName}"/>
<!--<DataGridTextColumn Header="Printer" Width="*" Binding="{Binding PrinterName, UpdateSourceTrigger=PropertyChanged}"/>-->
<DataGridComboBoxColumn x:Name="ddlPrinters" Header="Printer" Width="*" SelectedValueBinding="{Binding PrinterID, Mode=TwoWay}" SelectedValuePath="{Binding PrinterID, Mode=TwoWay}" DisplayMemberPath="{Binding PrinterName}"/>
</DataGrid.Columns>
</DataGrid>
private void gridPrinters_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
Printer printer = (Printer)e.Row.Item;
if (printer.PrinterID != 0)
{
Printer printerDB = context.Printers.Where(s => s.PrinterID == printer.PrinterID).Single();
printerDB.PrinterName = printer.PrinterName;
context.SaveChanges();
}
else
{
Printer newPrinter = new Printer()
{
PrinterName = printer.PrinterName
};
context.Printers.Add(newPrinter);
context.SaveChanges();
}
}
RefreshPrintersGrid();
}
我将后面代码中的 DataGridComboBoxColumn 绑定到包含打印机列表的 EF 模型。
当值已 selected 并且我们触发 RowEditEnding 函数时,组合框的值不会在 FunctionPrinterLookupModel 模型中更新。我觉得我在这里陷入了困境,并且无法从我的谷歌搜索时间中找到有效的解决方案。谁能帮我理顺一下?
您最好将组合框项目源绑定到 ViewModel 中的 属性。然后绑定选定的打印机,并在 属性 更改时在 ViewModel 中采取行动。
<DataGridComboBoxColumn x:Name="ddlPrinters" Header="Printer" Width="*" ItemsSource="{Binding PrinterList}" SelectedItem="{Binding SelectedPrinter, Mode=TwoWay}" SelectedValuePath="PrinterID" DisplayMemberPath="PrinterName"/>
在视图模型中
Private PrinterInfo _SelectedPrinter { get; set; }
Publuc PrinterInfo SelectedPrinter
{
get
{
return _SelectedPrinter;
}
set
{
_SelectedPrinter = value;
//save value to db or other actions
}
}
我在尝试使用 DataGridComboBoxColumn 更新我的 entity framework
时遇到了一些问题我有一个绑定到自定义模型 (FunctionPrinterLookupModel) 的数据网格,它基本上是建筑物周围打印机和函数之间的查找。功能都是静态的,但我希望用户能够 select 他们使用哪台打印机来实现功能。
<DataGrid Grid.Row="1" x:Name="gridLookup" AutoGenerateColumns="False" Width="500" RowEditEnding="gridLookup_RowEditEnding" Margin="20">
<DataGrid.DataContext>
<Models:Printer/>
</DataGrid.DataContext>
<DataGrid.Columns>
<DataGridTextColumn Header="Function" Width="*" IsReadOnly="True" Binding="{Binding FunctionName}"/>
<!--<DataGridTextColumn Header="Printer" Width="*" Binding="{Binding PrinterName, UpdateSourceTrigger=PropertyChanged}"/>-->
<DataGridComboBoxColumn x:Name="ddlPrinters" Header="Printer" Width="*" SelectedValueBinding="{Binding PrinterID, Mode=TwoWay}" SelectedValuePath="{Binding PrinterID, Mode=TwoWay}" DisplayMemberPath="{Binding PrinterName}"/>
</DataGrid.Columns>
</DataGrid>
private void gridPrinters_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e)
{
if (e.EditAction == DataGridEditAction.Commit)
{
Printer printer = (Printer)e.Row.Item;
if (printer.PrinterID != 0)
{
Printer printerDB = context.Printers.Where(s => s.PrinterID == printer.PrinterID).Single();
printerDB.PrinterName = printer.PrinterName;
context.SaveChanges();
}
else
{
Printer newPrinter = new Printer()
{
PrinterName = printer.PrinterName
};
context.Printers.Add(newPrinter);
context.SaveChanges();
}
}
RefreshPrintersGrid();
}
我将后面代码中的 DataGridComboBoxColumn 绑定到包含打印机列表的 EF 模型。
当值已 selected 并且我们触发 RowEditEnding 函数时,组合框的值不会在 FunctionPrinterLookupModel 模型中更新。我觉得我在这里陷入了困境,并且无法从我的谷歌搜索时间中找到有效的解决方案。谁能帮我理顺一下?
您最好将组合框项目源绑定到 ViewModel 中的 属性。然后绑定选定的打印机,并在 属性 更改时在 ViewModel 中采取行动。
<DataGridComboBoxColumn x:Name="ddlPrinters" Header="Printer" Width="*" ItemsSource="{Binding PrinterList}" SelectedItem="{Binding SelectedPrinter, Mode=TwoWay}" SelectedValuePath="PrinterID" DisplayMemberPath="PrinterName"/>
在视图模型中
Private PrinterInfo _SelectedPrinter { get; set; }
Publuc PrinterInfo SelectedPrinter
{
get
{
return _SelectedPrinter;
}
set
{
_SelectedPrinter = value;
//save value to db or other actions
}
}