我的程序有一个自定义的DependencyObject,我绑定了另一个DependencyObject的值,它们在代码中设置:
<TabControl
Grid.Column="1"
Grid.Row="1">
<TabItem
Header="XML">
<TextBox
Text="{Binding Asset.Xml, ElementName=window}"
IsReadOnly="True" />
</TabItem>
<TabItem
Header="Texture">
<we:DXImage>
<we:DXImage.Renderer>
<we:TextureRenderer
Source="{Binding Asset.Image, ElementName=window}" />
</we:DXImage.Renderer>
</we:DXImage>
</TabItem>
</TabControl>
与Asset.Xml的TextBox绑定完美无缺,如果我用TextBox替换第二项的xaml,它还会显示Asset.Image(string类型的图像的路径)的内容。 渲染器的Source属性如下所示:
private static readonly DependencyProperty SourceProperty = DependencyProperty.Register("Source", typeof(string), typeof(TextureRenderer),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender, SourceChanged));
public string Source
{
get { return (string)GetValue(SourceProperty); }
set { SetValue(SourceProperty, value); }
}
private static void SourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args)
{
// Do stuff
}
但是从不调用SourceChanged事件。
我在GitHub上更新了项目: https://github.com/Qibbi/WrathEd/tree/master/WrathEd2 xaml代码位于WrathEd2项目中,而DXImage,Renderer和其他支持类位于WrathEd.Windows中 当前的MainWindow背后是一个混乱的代码,我计划在完成项目时将其重构为适当的部分。
答案 0 :(得分:0)
问题是你的we:TextureRenderer
不是VisualTree的一部分(因为它在属性中)。因此,绑定无法找到源元素。
根据ElementName Binding is failing,您可以使用
Source={x:Reference window}
而不是ElementName=window
。
答案 1 :(得分:-1)
根据MSDN文档here
您需要将绑定的NotifyOnSourceUpdated设置为true