使用C#WPF中的指针同步两个对象标头

时间:2010-07-09 21:22:04

标签: c# wpf pointers

我想用指针同步两个对象标头。 例如:我知道我不能用当前的语法做到这一点,但我想要像:

Node node = new Node();
node.Label = "header1";

TabItem tabItem = new TabItem;
*(tabItem.Header) = &(node.Label);

因此,每当我更改node.Label时,tabItem.Header也会发生变化。

2 个答案:

答案 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