У меня есть 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);
}
}
Я предполагаю, что когда вы говорите, что элемент управления "привязан" к ToString (), ваш объект используется как Контент в ContentControl где-то внутри недоступного кода, который default создает TextBlock, который отображает значение ToString (если вы не уверены, что можете узнать это с помощью Snoop). Если вы создаете глобальный типизированный шаблон DataTemplate для своего типа Person в ресурсах элемента управления, вы можете использовать его для отображения другого свойства, например нового свойства FullName:
<ThirdPartyControl.Resources>
<DataTemplate DataType="{x:Type data:Person}">
<TextBlock Text="{Binding FullName}"/>
</DataTemplate>
</ThirdPartyControl.Resources>
Если вы не хотите добавлять специализированное свойство для полного имени, у вас должна быть возможность использовать StringFormat в привязке. См. Пример MultiBinding в этой записи блога . [Требуется .NET 3.5 SP1]
вы можете добавить третье свойство, доступное только для чтения, которое возвращает ToString()
, и вызвать OnPropertyChanged
с именем этого свойства
Не привязывайтесь к ToString()
. Вместо этого введите свойство FullName
и вызовите OnPropertyChanged("FullName")
в обоих ваших других установщиках свойств.