我正在使用DataGrid显示一些商店库存信息。每个项目可以属于一种类型的股票。ConvertBack未调用XAML绑定
相关实体('StockEntity')的属性如下:
'ItemId','ItemType','Grocery','Reading','Bathroom'。
此表中的几个例子行的是:
27, '杂货店', '苹果',NULL,NULL,NULL
127, '阅读',NULL, '台灯',NULL,NULL
我无法控制数据库/实体结构。
DataGrid列是一个自定义列,其中包含一个TextBox。 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()不被调用。
我认为ConvertBack()方法没有被调用,因为绑定路径=“。”,但我想不出另一种方式。 我也不知道是否可以按照我的方式'保存'转换器中的绑定对象。将TextBox的值写回到同一个实体对象以保存实体的数据库连接属性至关重要!
非常感谢。
你是正确的假设,那是因为你'Binding'的'Path'的。为什么不只是绑定到适当的属性? –
有没有像'动态绑定'这样的东西?是否可以使用'ItemType'来选择要绑定的属性? – user1070084