Синхронизация двух заголовков объектов с указателями в C # WPF - PullRequest
1 голос
/ 10 июля 2010

Я хотел бы синхронизировать два заголовка объекта с указателями. Например: я знаю, что не могу сделать это с текущим синтаксисом, но мне хотелось бы что-то вроде:

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

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

Поэтому, когда я меняюсь, node.Label, tabItem.Header также меняется.

Ответы [ 2 ]

2 голосов
/ 10 июля 2010

Редактировать: добавлен пример

Вы должны быть в состоянии сделать это, используя привязку данных. Если Node - это пользовательский объект, вы можете либо поддержать INotifyPropertyChange, либо реализовать свойство Label как свойство зависимости. (Я не уверен, что такое соглашение, я бы предположил, что если Node по сути своей является объектом пользовательского интерфейса, тогда используйте свойство зависимости, а если нет, то реализуйте 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 - заголовок вкладки обнаруживает его и обновляет).

0 голосов
/ 10 июля 2010

Вы пытались создать новую привязку, чтобы связать два свойства? Если Node - ваш собственный объект, реализуйте INotifyPropertyChanged. Вы можете сделать это как в коде, так и в XAML. Поскольку вы выглядите так, будто делаете что-то в коде, вот ссылка о том, как это сделать: http://learnwpf.com/Posts/Post.aspx?postId=a089e315-9440-4f74-b872-ba6d14be7c80

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...