繁体   English   中英

将控件/窗口属性绑定到自定义属性并设置默认值

[英]Bind Control/Window property to custom property and set default value

我试图将WindowTitle属性绑定到此Window的自定义属性。 XAML看起来像这样:

Title="{Binding Path=WindowTitle, RelativeSource={RelativeSource Mode=Self}}"

后面的代码是这样的:

public string WindowTitle
{
    get
    {
        string title = (string)GetValue(WindowTitleProperty);
        title = string.IsNullOrEmpty(title) ? "Editor" : title;
        return title;
    }

    set
    {
        SetValue(WindowTitleProperty, value);
    }
}

public static readonly DependencyProperty WindowTitleProperty =
           DependencyProperty.Register("WindowTitle", typeof(string), typeof(Editor), new UIPropertyMetadata(null));

将属性WindowTitle设置为新值后,此方法效果很好。 但是不幸的是,在加载Window我没有任何标题。 甚至没有调用WindowTitle的吸气剂。 据我所知,它永远不会被调用。 我究竟做错了什么? 为什么从未调用getter(即使正确设置了标题)? 我可以通过其他方式设置默认值吗?

您的财产看起来很奇怪。 为什么首先将其定义为依赖项属性? 您也可以使用CLR属性并实现INotifyPropertyChanged接口。 这对我来说很好:

public partial class Window13 : Window, INotifyPropertyChanged
{
    public Window13()
    {
        InitializeComponent();
    }

    private string _windowTitle = "default title...";
    public string WindowTitle
    {
        get { return _windowTitle; }
        set { _windowTitle = value; NotifyPropertyChanged(); }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

依赖项属性的CLR获取器应仅调用GetValue方法,并且不包含任何其他逻辑。

编辑:如果您确实出于某种原因想要依赖项属性,则应按以下方式实现:

public string WindowTitle
{
    get
    {
        return (string)GetValue(WindowTitleProperty);
    }

    set
    {
        SetValue(WindowTitleProperty, value);
    }
}

public static readonly DependencyProperty WindowTitleProperty =
           DependencyProperty.Register("WindowTitle", typeof(string), typeof(Editor), new UIPropertyMetadata("Editor"));

请注意,在注册属性时,请指定默认值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM