WPF, Связывающие - Уведомляют Изменение в значении ToString

У меня есть textblock, который связывается с объектом. Этот объект я переопределил 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);
  }
}
10
задан David Ward 19 February 2010 в 12:30
поделиться

4 ответа

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

<ThirdPartyControl.Resources>
  <DataTemplate DataType="{x:Type data:Person}">
    <TextBlock Text="{Binding FullName}"/>
  </DataTemplate>
</ThirdPartyControl.Resources>
3
ответ дан 4 December 2019 в 02:50
поделиться

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

3
ответ дан 4 December 2019 в 02:50
поделиться

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

.
2
ответ дан 4 December 2019 в 02:50
поделиться

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

-1
ответ дан 4 December 2019 в 02:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: