将内容绑定到另一个类的属性
本文关键字:属性 另一个 绑定 | 更新日期: 2023-09-27 17:53:49
我试图将一个简单标签的Content
属性绑定到另一个类的属性。我已经尝试了各种方法,但都没有用。
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范围。它们只能绑定到该范围内的东西。
有一些变通方法:
-
你可以相对容易地调用一个静态属性,然后绑定像"{x: static local:StaticClass.StaticProperty}"
-
你可以在你的UserControl中创建一个被引用对象的实例(无论是在XAML中还是在后面的代码中),并将UserControl的DataContext设置为它自己。被引用的对象必须在具有公共get和set(如果需要)访问器的公共属性中公开。你不需要依赖属性,如果你实现INotifyPropertyChanged(无论你喜欢)。
-
如果你想从不同的窗口或不同的ViewModel获取数据,有很多方法可以做到这一点。它太长了(而且太"可用"),在这里发布,快速搜索会给你很多结果。
在你的情况下,我猜你的应用程序中只有一个主窗口,所以也许你可以创建一个静态属性来返回当前的主窗口实例,然后从任何地方绑定到它的任何属性。
在MainWindow.xaml.cs中的代码
private static MainWindow_instance;
public static MainWindow Instance
{
get
{
if (_instance == null)
_instance = new MainWindow();
else
_instance = this;
return _instance;
}
}
警告:这在某些情况下对我有效,但我从未在主窗口中使用过它,我不确定这是最佳实践。
希望这有助于,问候!