Я хотел бы синхронизировать два объектных заголовка с указателями. Например: Я знаю, что не могу сделать этого с текущим синтаксисом, но я хотел бы что-то как:
Node node = new Node();
node.Label = "header1";
TabItem tabItem = new TabItem;
*(tabItem.Header) = &(node.Label);
Таким образом каждый раз, когда я изменяюсь node.Label
, tabItem.Header
изменения также.
Edit: added an example
Вы должны быть в состоянии достичь этого, используя привязку к базе данных. Если Node является пользовательским объектом, вы должны либо поддерживать INotifyPropertyChange, либо реализовать свойство Label как зависимое свойство. (Я не уверен, какова конвенция, я бы предположил, что если Node по своей сути является объектом UI, то используйте зависимое свойство, а если нет, то реализуйте INotifyPropertyChanged.
Пример: Объект Node:
public class Node: System.ComponentModel.INotifyPropertyChanged
{
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
public string Label
{
get { return this._Label; }
set
{
this._Label = value;
this.OnPropertyChanged(new System.ComponentModel.PropertyChangedEventArgs("Label"));
}
}
private string _Label;
protected virtual void OnPropertyChanged(System.ComponentModel.PropertyChangedEventArgs propertyChangedEventArgs)
{
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if (propertyChanged != null)
propertyChanged(this, propertyChangedEventArgs);
}
}
Код вашей формы (этот метод устанавливает привязку к базе данных в коде, вы также можете установить привязку к базе данных в XAML):
public partial class MainWindow : Window
{
public Node TheNode { get; set; }
public MainWindow()
{
InitializeComponent();
this.TheNode = new Node();
this.DataContext = this;
this.Tab1.SetBinding(System.Windows.Controls.TabItem.HeaderProperty, "TheNode.Label");
this.TheNode.Label = "Test";
}
}
XAML для вашей формы
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl>
<TabItem Name="Tab1"/>
</TabControl>
</Grid>
Когда вы устанавливаете привязку к базе данных, WPF определит, что ваш объект Node реализует INotifyPropertyChanged, и автоматически подпишется на событие PropertyChanged.
(обратите внимание, что в коде MainWindow я устанавливаю привязку, а затем устанавливаю значение Node.Label - заголовок вкладки обнаруживает это и обновляется).
Вы пытались создать новую привязку для связывания двух свойств? Если Node - ваш собственный объект, реализуйте INotifyPropertyChanged. Вы можете сделать это как в коде, так и в XAML. Поскольку вы выглядите так, как будто делаете что-то внутри кода, вот ссылка, как это сделать: http://learnwpf.com/Posts/Post.aspx?postId=a089e315-9440-4f74-b872-ba6d14be7c80