将内容绑定到另一个类的属性

本文关键字:属性 另一个 绑定 | 更新日期: 2023-09-27 17:53:49

我试图将一个简单标签的Content属性绑定到另一个类的属性。我已经尝试了各种方法,但都没有用。

下面是源类(MainWindow.xaml.cs)中的属性:
    public String FileTitle
    {
        get
        {
            return this.GetValue(FiletitleProperty) as string;
        }
        set
        {
            this.SetValue(FiletitleProperty, value);
        }
    }
    public DependencyProperty FiletitleProperty;

    public MainWindow()
    {           
        FiletitleProperty = DependencyProperty.Register("FileTitle", typeof(String), typeof(MainWindow));
        ...
    }

在我的目标类中,我有一个源类的对象称为CallbackObject(命名不太合适)

下面是绑定的xaml代码:

<Label x:Name="lblFiletitle" Content="{Binding Source=CallbackObject, Path=FileTitle}" Margin="10,213,10,0" Height="35" VerticalAlignment="Top" FontSize="16" Padding="0,5,5,5" />

有可能这样做吗?还是我必须让它变得更复杂和不优雅?

将内容绑定到另一个类的属性

如果CallbackObject在后面的代码尝试:

<Label Content="{Binding RelativeSource={RelativeSource AncestorLevel=1, AncestorType=UserControl,Mode=FindAncestor}, Path=CallbackObject.FileTitle}" />

如果你的标签被放置在UserControl或Page中,你不能直接绑定到另一个对象(无论是Window或其他)的属性,而不需要在你的UserControl中创建该对象的实例或引用。层次结构中的父元素(XAML中最顶层的元素)定义了子元素的DataContext范围。它们只能绑定到该范围内的东西。

有一些变通方法:

  1. 你可以相对容易地调用一个静态属性,然后绑定像"{x: static local:StaticClass.StaticProperty}"

  2. 你可以在你的UserControl中创建一个被引用对象的实例(无论是在XAML中还是在后面的代码中),并将UserControl的DataContext设置为它自己。被引用的对象必须在具有公共get和set(如果需要)访问器的公共属性中公开。你不需要依赖属性,如果你实现INotifyPropertyChanged(无论你喜欢)。

  3. 如果你想从不同的窗口或不同的ViewModel获取数据,有很多方法可以做到这一点。它太长了(而且太"可用"),在这里发布,快速搜索会给你很多结果。

在你的情况下,我猜你的应用程序中只有一个主窗口,所以也许你可以创建一个静态属性来返回当前的主窗口实例,然后从任何地方绑定到它的任何属性。

在MainWindow.xaml.cs中的代码

    private static MainWindow_instance;
    public static MainWindow Instance
    {
        get
        {
            if (_instance == null)
                _instance = new MainWindow();
            else
                _instance = this;
            return _instance;
        }
    }

警告:这在某些情况下对我有效,但我从未在主窗口中使用过它,我不确定这是最佳实践。

希望这有助于,问候!