将内容绑定到其他类的属性

时间:2013-01-15 18:12:57

标签: c# wpf

我正在尝试将简单标签的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" />

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

2 个答案:

答案 0 :(得分:1)

如果代码中有CallbackObject,请尝试:

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

答案 1 :(得分:0)

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

有一些解决方法:

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

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

  3. 如果您想从其他Window或其他ViewModel获取数据,有很多方法可以实现。这里发布的时间太长(太“可用”),快速搜索会给你很多结果。

  4. 在你的情况下,我猜你的app中只有一个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,我不确定这是最好的做法。但它确实有用。

    希望这有帮助,尊重!