我正在使用 DataGrid 来显示一些商店库存信息。每个项目都可以属于一种类型的库存。
相关实体 ('StockEntity') 具有以下属性:
'ItemId'、'ItemType'、'Grocery'、'Reading'、'Bathroom'。
此表中的几个示例行是:
27, 'Grocery', 'Apple', null, null, null
127, 'Reading', null, 'Reading lamp', null, null
我无法控制数据库/实体结构。
DataGrid 列是一个自定义列,其中包含(除其他外)一个文本框。DataGrid 绑定到 StockEntity 对象的 ObservableCollection。我想将 TextBox 的值绑定到相关属性。例如,如果 'ItemType' = 'Grocery',则 TextBox 将显示 'Grocery' 属性。如果我更改文本框中的值,它应该被写回“Grocery”属性。
这是我到目前为止所拥有的:
XAML:
<TextBox Grid.Column="0" Padding="5" VerticalAlignment="Center" Width="155">
<TextBox.Text>
<Binding Path="."
Converter="{StaticResource StockDataToTextConverter}"
Mode="TwoWay"
UpdateSourceTrigger="LostFocus">
</Binding>
</TextBox.Text>
</TextBox>
转换器很简单:
private StockEntity stock;
public object Convert(object value, Type targetType, object parameter,
CultureInfo culture)
{
this.stock = value as StockEntity;
string text="";
if(this.stock!=null){
text = StockModel.GetStockData(this.stock);
}
return text;
}
public object ConvertBack(object value, Type targetType, object parameter,
CultureInfo culture)
{
string info = value as string;
if(info!=null && this.stock!=null){
StockModel.SetStockData(ref this.stock, info);
}
return stock;
}
StockModel.Get/SetStockData() 方法只需使用反射来获取/将信息放回正确的属性中。Convert() 方法工作正常:TextBox 显示正确的数据。如果我编辑 TextBox 中的值,它只会恢复为旧值。未调用 ConvertBack()。
我认为由于 Binding Path="." 而没有调用 ConvertBack() 方法,但我想不出另一种解决方法。我也不知道我是否可以按照我的方式在转换器中“保存”绑定对象。将 TextBox 的值写回同一实体对象至关重要,以保留实体的数据库连接属性!
非常感谢。