[英]changing the bound object in a datatemplate
數據模板很棒,但是在特定情況下綁定存在問題。 我有一個Value類,它具有StringValue
, DateValue
等各種后代。這些值顯示在Listbox
。 此模板可以正常工作,並綁定到StringValue的特定屬性:
<DataTemplate DataType="{x:Type values:StringValue}">
<TextBox Margin="0.5"
Text="{Binding Path=Native}" />
</DataTemplate>
但是,當我綁定到對象本身而不是特定屬性時,更改不會更新該對象,如以下模板所示:
<DataTemplate DataType="{x:Type values:LookupValue}">
<qp:IncrementalLookupBox SelectedValue="{Binding Path=., Mode=TwoWay}"
LookupProvider="{Binding ElementName=EditWindow, Path=ViewModel.LookupProvider}">
</qp:IncrementalLookupBox>
</DataTemplate>
IncrementalLookupBox
是一個UserControl
,它最終允許用戶選擇LookupValue
,它應該替換模板中綁定的項目。 如果將其綁定到一個簡單的類型(例如int或字符串),則該綁定將替換該對象,因此我不確定更復雜的對象有什么區別。 我知道IncrementalLookBox
可以正常工作,因為將某些文本框綁定到SelectedValue
的屬性(這是一個依賴屬性)會顯示正確選擇的LookupValue
。
如果情況變得更加清楚,這里是SelectedValue的實現:
public LookupValue SelectedValue
{
get { return (LookupValue)GetValue(SelectedValueProperty); }
set { SetValue(SelectedValueProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedValue. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedValueProperty =
DependencyProperty.Register("SelectedValue", typeof(LookupValue), typeof(IncrementalLookupBox), new PropertyMetadata(OnSelectedValuePropertyChanged));
private static void OnSelectedValuePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var obj = d as IncrementalLookupBox;
obj.OnSelectedValuePropertyChanged(e);
}
private void OnSelectedValuePropertyChanged(DependencyPropertyChangedEventArgs e)
{
CheckForSelectedValueInLookups();
}
如果所有其他方法均失敗,請考慮使用ValueConverter來獲取所需的值。
編輯:這不起作用。 請參閱下面評論中的鏈接。
確保您的類實現了INotifyPropertyChanged並在此處引發PropertyChanaged:
private void OnSelectedValuePropertyChanged(DependencyPropertyChangedEventArgs e)
{
CheckForSelectedValueInLookups();
// RaisePropertyChanged();
}
我的問題與此處描述的相同:
顯然,如果我在此處輸入的文字不夠多,我的答案將被轉換為評論,而無法解決問題。 因此,總而言之,使用雙向Binding =。 在ListBox(或任何ItemsControl I圖像)中使用的數據模板中,它將不起作用,因為它不是綁定的對象本身,而是包含它的ListBoxItem。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.