Привязка данных WPF: привязка к свойству, которое ссылается на два других свойства - PullRequest
0 голосов
/ 20 июля 2010

В основном, как мне привязать (одностороннее) к текстовому полю с именем txtFullName.Первоначально любой текст в текстовом поле очищается / удаляется, так как ToString возвращает "".Но когда я делаю изменения в FirstName или LastName, это не обновляет привязку к FullName.Есть ли способ сделать это?

Кроме того, есть ли способ привязки к методу (не только поле)?То есть установить привязку непосредственно к методу ToString () и обновить его при изменении FirstName или LastName?

О, и было бы очень здорово, если бы был какой-то общий способ обработки этогокак атрибут в поле FullName или атрибут в методе ToString, сообщающий ему, какие свойства нужно искать для изменений.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace AdvancedDataBinding
{
    public class UserEntity
    {
        static UserEntity()
        {
            FirstNameProperty = DependencyProperty.Register("FirstName", typeof(String), typeof(UserEntity));
            LastNameProperty = DependencyProperty.Register("LastName", typeof(String), typeof(UserEntity));
        }

        public String FirstName
        {
            get { return (String)GetValue(FirstNameProperty); }
            set { SetValue(FirstNameProperty, value); }
        }
        public static readonly DependencyProperty FirstNameProperty;

        public String LastName
        {
            get { return (String)GetValue(LastNameProperty); }
            set { SetValue(LastNameProperty, value); }
        }
        public static readonly DependencyProperty LastNameProperty;

        public String FullName
        {
            get { return ToString(); }
        }

        public override string ToString()
        {
            return FirstName + " " + LastName;
        }
    }
}

Ответы [ 2 ]

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

Как привязать текстовое поле к нескольким значениям: создайте MultiValueConverter и используйте его для привязки как к FirstName, так и LastName.

FullName не уведомляет об изменении FirstName или LastName.В вашем классе удалите все использование DependencyProperty и вместо этого сделайте, чтобы класс реализовал INotifyPropertyChanged.Опубликуйте событие PropertyChanged для FullName при изменении FirstName или LastName.Свяжите свое текстовое поле непосредственно с FullName.

Проверьте ObjectDataProvider для "привязки" к методам.

Из этих ответов я предлагаю вам сделать второй.

1 голос
/ 21 июля 2010

Вы можете использовать MultiBinding так ...

<TextBlock>
     <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}, {1}">
           <Binding Path="LastName" />
           <Binding Path="FirstName" />
        </MultiBinding>
     </TextBlock.Text>
</TextBlock>
...