用户控件上的依赖项属性绑定数据发生更改时不更新属性
问题描述:
我见过其他人有这个问题,有时我最好告诉我已经复制了几个修正的变体,但还没有得到它的工作。用户控件上的依赖项属性绑定数据发生更改时不更新属性
我知道我的绑定数据正在发送适当的INotify事件,因为我可以将其他控件绑定到数据(如文本块),并在对象属性发生更改时查看其内容更改,但我的用户控件似乎没有收到事件。
public partial class MappingSelector : UserControl
{
public Type OutputDriver
{
get { return (Type)GetValue(OutputDriverProperty); }
set { Console.WriteLine(value.ToString()); SetValue(OutputDriverProperty, value); UpdateUI(); }
}
// Using a DependencyProperty as the backing store for OutPutDriver. This enables animation, styling, binding, etc...
public static readonly DependencyProperty OutputDriverProperty =
DependencyProperty.Register("OutputDriver", typeof(Type), typeof(MappingSelector), new PropertyMetadata(null));
public MappingSelector()
{
InitializeComponent();
(this.Content as FrameworkElement).DataContext = this;
//UpdateUI();
}
}
该setter有一个控制台跟踪,永远不会触发,所以我相信,该属性永远不会被设置。
我然后使用绑定到它:
<root:MappingSelector OutputDriver="{Binding LoadedProfile.UsedDriverInterface, ElementName=page, UpdateSourceTrigger=PropertyChanged}"/>
我知道LoadedProfile.UsedDriverInterface
被更新和发送正确的事件,因为我也有这个它工作得很好:
<TextBlock Text="{Binding LoadedProfile.UsedDriverInterface, ElementName=page, UpdateSourceTrigger=PropertyChanged}"/>
后期编辑: 这工作,但它真的是我需要做的?有没有更好的办法? 将此添加到用户控件构造函数;
var OutputDriverDPD = DependencyPropertyDescriptor.FromProperty(OutputDriverProperty, typeof(MappingSelector));
OutputDriverDPD.AddValueChanged(this, (sender, args) =>
{
OutputDriver = (Type)GetValue(OutputDriverProperty);
});
答
的制定者有不闪光,所以我深信,财产永远不会被设置在控制台跟踪。
这是一个陷阱。你已经定义的属性获得者和设置者为你的便利。 WPF框架不会调用它们,它将直接使用依赖属性。绝对不要在那些吸气和吸气装置上做任何你需要做的事情。
如果您想对属性更改做出反应,请使用您已发现的回调。你的控制台跟踪应该在那里,而不是在setter中。
原因在这里解释:[XAML加载和依赖属性](https://msdn.microsoft.com/en-us/library/bb613563(v = vs.110).aspx) – Clemens
难题,所以使用DP作为我所有事件和条件的“枢纽”,并且只是使用属性来控制绑定? – Wobbles
@Wobbles是的,属性获取/设置仅供您使用,框架将使用DP。 – nvoigt