public interface IClassA
{
string Description { get; set; }
// more IClassA specific definitions
}
public interface IClassB
{
string Description { get; set; }
// more IClassB specific definitions
}
public class ClassA : IClassA
{
public string Description { get; set; }
}
public class ClassB : IClassB
{
public string Description { get; set; }
}
Это очень упрощенный код. Для всех классов для классов нет недостатков INotifyPropertyChanged
. Просто наблюдайте за всем кодом, как если бы он был правильно реализован.Как связать свойство динамического типа?
Ввод Description
в базовый интерфейс для IClassA
и IClassB
нельзя считать, еще, поэтому мне было интересно о dynamic
свойств, связанных с помощью связывания данных в WPF. Это то, что я пробовал:
public class CustomClass
{
public dynamic Instance { get; set; }
// passed instance is a ClassA or ClassB object
public CustomClass(dynamic instance)
{
Instance = instance;
}
}
Моего Xaml содержит TextBlock
, который имеет свой DataContext набор на CutomClass
объекта. Если я изменю тип свойства Instance
, например. IClassA и заполните его правильно, все работает так, как ожидалось. Не с dynamic
.
<TextBlock Text="{Binding Instance.Description}" />
Xaml Дизайнер/ReSharper в VS2012 говорит мне: Не удается разрешить свойство «Описание» в контексте данных типа «объекта».
Хотя CodeInstance
описывается как тип dynamic
. Но код скомпилирован, поэтому я подумал, что это может быть проблема времени разработки. Но TextBlock
остается пустым.
Я мог бы неправильно понять принцип dynamic
в этом случае, я не знаю. Таким образом, отсутствие результатов поиска с помощью Google может быть вызвано не точно зная, что искать.
Вы получаете ошибку привязки во время выполнения? Какая ошибка? –
Связывание уже довольно динамично, поэтому вы можете использовать Object для типа Instance. Вы по-прежнему будете получать предупреждения о времени разработки, но это будет работать во время выполнения. –
TextBlock, вероятно, пуст, потому что нет уведомления, чтобы сообщить Xaml, что он изменился. –