我正在使用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