0

我正在第一次认真涉足 Prism(Unity)。我有一个带有工具栏控件的模块,它被(正确地)加载到它应该加载的区域中。此工具栏是一个列表框,其中 ItemsSource 数据绑定到其 ViewModel 上的 ToolButtons 属性,构造函数实例化三个 ToolButtons 并将其添加到 ToolButtons 集合。

我的 ToolButton 类具有三个自定义 DependencyProperties:Title(字符串)、ButtonFace(图像)、ActiveDocumentCount(int)。样式由模块中的资源字典负责,其中包含样式和关联的 ControlTemplate。我已经对属性进行了数据绑定,但是没有任何值或图像通过 TemplateBinding 显示(但是样式中的其他元素是)。

我正在尝试调试数据绑定,但无济于事。我在“输出”窗口中没有得到任何相关的消息,并且该博客中的第二和第三个建议也没有产生任何输出。我认为,如果我能得到详细的(即 PresentationTraceSources.TraceLevel=High)输出,我就能弄清楚数据绑定前端发生了什么。

编辑:

工具按钮类

public class ToolButton : Button
{
    public ToolButton()
    {
        //DefaultStyleKeyProperty.OverrideMetadata(typeof(ToolButton), new FrameworkPropertyMetadata(typeof(ToolButton)));
    }

    public Image ButtonFace
    {
        get { return (Image)this.GetValue(ButtonFaceProperty); }
        set { this.SetValue(ButtonFaceProperty, value); }
    }
    public static readonly DependencyProperty ButtonFaceProperty =
        DependencyProperty.Register("ButtonFace", typeof(Image), typeof(ToolButton), new PropertyMetadata(null));

    public string Title
    {
        get { return (string)this.GetValue(TitleProperty); }
        set { this.SetValue(TitleProperty, value); }
    }

    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("Title", typeof(string), typeof(ToolButton), new PropertyMetadata(""));

    public int OpenRecordCount
    {
        get { return (int)this.GetValue(OpenRecordCountProperty); }
        set { this.SetValue(OpenRecordCountProperty, value); }
    }

    public static readonly DependencyProperty OpenRecordCountProperty =
        DependencyProperty.Register("OpenRecordCount", typeof(int), typeof(ToolButton), new PropertyMetadata(null));

}
4

1 回答 1

1

那些 DP 在 CLR 支持的属性中看起来不错 SetValue 很好....但是如果您或任何人在这些属性上设置本地值(例如,通过调用您的 CLR 支持的属性或 DependencyObject.SetValue),那么这将破坏绑定。

相关链接:

于 2012-08-01T14:23:28.847 回答