0

我正在尝试将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" />

甚至可以这样做,还是我必须让它变得更复杂和不优雅?

4

2 回答 2

1

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

<Label Content="{Binding RelativeSource={RelativeSource AncestorLevel=1, AncestorType=UserControl,Mode=FindAncestor}, Path=CallbackObject.FileTitle}" />
于 2013-01-15T18:47:22.403 回答
0

如果您的标签放置在 UserControl 或 Page 内,则您不能直接绑定到另一个对象(无论是 Window 还是其他)中的属性,除非在您的 - 比如说 - UserControl 中创建该对象的实例或引用。层次结构中的父元素(XAML 中的最顶层元素)定义子元素的 DataContext 范围。它们只能绑定到该范围内的事物。

有一些解决方法:

  1. 您可以相对轻松地调用静态属性,然后调用像“{x:Static local:StaticClass.StaticProperty}”这样的绑定。

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

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

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

您的 MainWindow.xaml.cs 中的此代码

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

            return _instance;
        }
    }

警告:这在某些情况下对我有用,但我从未将它用于 MainWindow,我不确定这是最佳实践。不过,它有效。

希望这会有所帮助,问候!

于 2013-01-15T18:38:50.167 回答