представьте следующие простые модели (пример для простоты; на самом деле у нас есть MVVM, но это не имеет значения):
public class User {
public string Username { get; set; }
}
public class StackOverflowUser : User {
public int Reputation { get; set; }
}
Теперь у нас есть Silverlight UserControl
, который содержит следующее Controls
(опять же, это всего лишь пример, урезанный до сути):
<Grid>
<TextBlock Text="Username:" />
<TextBlock Text="{Binding Path=Username}" />
<TextBlock Text="Reputation:" />
<TextBlock Text="{Binding Path=Reputation}" />
</Grid>
Теперь я бы хотел, чтобы этот UserControl
был совместим с обеими моделями, User
и StackOverflowUser
. Я мог бы установить DataContext
UserControl на User
или StackOverflowUser
Тип:
this.DataContext = new User { Username = "john.doe" };
Если установлено значение StackOverflowUser
, все работает нормально. Если установлено значение User
, я получаю «Ошибка пути BindingExpression», потому что свойство Reputation
отсутствует в модели User
. Что я полностью понимаю.
Есть ли способ 1) избежать этого
исключение и 2) управления
видимость органов управления, развал
когда привязанное свойство недоступно?
Конечно, мы предпочитаем элегантное решение, где проблема решается путем настройки выражения привязки и / или использования конвертеров и т. Д., И по возможности избегайте тонны кода.
Заранее спасибо за помощь и предложения,
С наилучшими пожеланиями,
Thomas