[英]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.