WPF Binding - Уведомить об изменении значения ToString - PullRequest
10 голосов
/ 19 февраля 2010

У меня есть текстовый блок, связанный с объектом. Этот объект я переопределил ToString, чтобы вернуть комбинацию из 2 других свойств. Как я могу уведомить, что значение ToString было изменено при обновлении одного из значений свойства?

К сожалению, я не могу изменить привязку к значению ToString, так как он находится в стороннем контроле, поэтому действительно нужно иметь возможность уведомлять напрямую.

Надеюсь, приведенное ниже определение класса прояснит, что я имею в виду:

public class Person : INotifyPropertyChanged
{
  private string firstname;
  public string Firstname
  {
    get { return firstname; }
    set
    {
      firstname = value;
      OnPropertyChanged("Firstname");
    }
  }

  private string surname;
  public string Surname
  {
    get { return surname; }
    set
    {
      surname = value;
      OnPropertyChanged("Surname");
    }
  }

  public override string ToString()
  {
    return string.Format("{0}, {1}", surname, firstname);
  }
}

Ответы [ 4 ]

3 голосов
/ 19 февраля 2010

Я предполагаю, когда вы говорите, что элемент управления "привязан" к ToString (), что ваш объект используется как Content в ContentControl где-то внутри недоступного кода, который по умолчанию создает TextBlock, который отображает значение ToString (если вы не уверен, что вы можете узнать с Snoop). Если вы создаете глобальный типизированный DataTemplate для своего типа Person в ресурсах элемента управления, вы можете использовать его для отображения другого свойства, например нового свойства FullName:

<ThirdPartyControl.Resources>
  <DataTemplate DataType="{x:Type data:Person}">
    <TextBlock Text="{Binding FullName}"/>
  </DataTemplate>
</ThirdPartyControl.Resources>
3 голосов
/ 19 февраля 2010

Если вы не хотите добавлять специализированное свойство для полного имени, вы должны иметь возможность использовать StringFormat в привязке.См. Пример MultiBinding в этом блоге .[Требуется .NET 3.5 SP1]

2 голосов
/ 19 февраля 2010

вы можете добавить третье свойство только для чтения, которое возвращает ToString(), и вызвать OnPropertyChanged с именем этого свойства

0 голосов
/ 19 февраля 2010

Не связывать с ToString(). Вместо этого введите свойство FullName и поднимите OnPropertyChanged("FullName") в обоих других ваших установках свойств.

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