我想用指针同步两个对象标头。 例如:我知道我不能用当前的语法做到这一点,但我想要像:
Node node = new Node();
node.Label = "header1";
TabItem tabItem = new TabItem;
*(tabItem.Header) = &(node.Label);
因此,每当我更改node.Label
时,tabItem.Header
也会发生变化。
答案 0 :(得分:2)
编辑:添加了一个示例
您应该能够使用数据绑定来完成此任务。如果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的值 - 选项卡标头检测到并更新)。
答案 1 :(得分:0)
您是否尝试创建新的Binding来绑定这两个属性?如果Node是您自己的对象,请实现INotifyPropertyChanged。您可以在代码和XAML中执行此操作。由于您看起来像是在代码中执行操作,因此以下是有关如何执行此操作的链接:http://learnwpf.com/Posts/Post.aspx?postId=a089e315-9440-4f74-b872-ba6d14be7c80