我想将Property Title
绑定到我的tabitem header
。我的架构看起来像这样:
在我的mainwindow.xaml
文件中,我有以下代码:
<Controls:MetroWindow x:Class="ConfigManager.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
Title="ConfigManager">
<DockPanel>
<TabControl Controls:TabControlHelper.IsUnderlined="True">
<TabItem DataContext="{Binding UserManager}" Header="{Binding Title}"">
</TabItem>
<TabItem DataContext="{Binding PrinterManager}" Header="{Binding Title}">
</TabItem>
<TabItem Header="TabItem">
</TabItem>
</TabControl>
</DockPanel>
</Controls:MetroWindow>
我的MainWindow.xaml.cs:
namespace ConfigManager
{
/// <summary>
/// Interaktionslogik für MainWindow.xaml
/// </summary>
public partial class MainWindow : MetroWindow
{
public ManagerRoot ManagerRoot { get; set; }
public MainWindow()
{
InitializeComponent();
ManagerRoot = new ManagerRoot();
DataContext = ManagerRoot;
}
}
}
My ManagerRoot:
namespace ConfigManager
{
[Serializable]
public class ManagerRoot
{
[XmlElement("UserManager")]
public UserManager UserManager = new UserManager();
[XmlElement("PrinterManager")]
public PrinterManager PrinterManager = new PrinterManager();
}
}
我的UserManager(PrinterManager是相同的):
[XmlIgnore]
private string _title = "User";
[XmlAttribute("Title")]
public string Title
{
get { return this._title; }
set { this._title = value; }
}
那就是我得到的错误:
System.Windows.Data Error: 40 : BindingExpression path error: 'Title' property not found on 'object' ''ManagerRoot' (HashCode=20501377)'. BindingExpression:Path=Title; DataItem='ManagerRoot' (HashCode=20501377); target element is 'TabItem' (Name=''); target property is 'Header' (type 'Object')
System.Windows.Data Error: 40 : BindingExpression path error: 'UserManager' property not found on 'object' ''ManagerRoot' (HashCode=20501377)'. BindingExpression:Path=UserManager; DataItem='ManagerRoot' (HashCode=20501377); target element is 'TabItem' (Name=''); target property is 'DataContext' (type 'Object')
也许有人可以帮助我...我尝试了3个小时。
答案 0 :(得分:1)
你有几个问题:
在您的代码中,ManagerRoot的UserManager和PrinterManager成员实际上是字段,而不是属性。您无法绑定到字段。将它们更改为属性。这是你的主要问题。
也许您的真实代码以某种方式执行此操作并且您尚未显示它,但为了使绑定工作正常,您应该触发绑定到的所有属性的属性更改通知。这意味着ManagerRoot,UserManager和PrinterManager都应为其属性生成属性更改通知。在您的示例中,您可能无法使用它,但如果您曾尝试更改title属性,或者在面板打开时将ManagerRoot,PrinterManager或UserManager替换为运行时的其他对象,则更改将不会生效在您的面板上没有生成属性更改通知。有很多关于理解房产变更通知的好文章,而且我手边没有链接,但如果你搜索有关该主题的信息,你应该找到很多好的参考资料和实例