Я хочу связать объект Info
в моем столбце xaml:
<DataGridTextColumn Width="200" Binding="{Binding Path=Message.Info.InfoName, Mode=OneWay, TargetNullValue=No Information available}">
<DataGridTextColumn.Header>
<Label>Information</Label>
</DataGridTextColumn.Header>
</DataGridTextColumn>
Для каждого сообщения у меня есть конструктор и в том же классе сообщений, у меня есть это свойство:
public IMessageInformation Info
{
get
{
//if (_info == null)
// return "no info available";
return _info;
}
set
{
_info = value;
NotifyPropertyChanged("Info");
}
}
Теперь для каждого сообщения столбец WPF должен отображать либо имя информации (получает из объекта Info (свойство Info.InfoName)), либо если сообщение не имеет информации (другого типа), оно должно отображать "Нет информации".
Если нет никакой информации, я не получаю никакого объекта (Info == null).
Моя проблема:
Что я пробовал:
Я попытался вставить оператор if в свойство Info (getter). Заявление работает, но, конечно, я не могу вернуть строку, если свойство ожидает информацию об объекте возвращаемого типа.
И мой другой подход TargetNullValue=No Information available}
тоже не работает.
Вы должны добавить атрибут FallbackValue в свой XAML следующим образом:
Binding="{Binding
Path=Message.Info.InfoName,
Mode=OneWay,
FallbackValue=No Information available}"
Это связано с тем, что ваше связывание не выполняется из-за того, что часть Info в вашем пути привязки имеет значение null. Вы должны увидеть совпадающую ошибку в вашем отладочном выходе.
Зависит немного от того, как вы извлекаете данные, но одно решение может состоять в том, чтобы иметь свойство "InfoName" в сообщении, которое вы заполняете при извлечении данных.
List<Message> messages = context.Messages.Select(m => new Message
{
InfoName = m.Info != null ? m.InfoName : "no info available",
// etc.
})
.ToList();
TargetNullValue
проблему в этом случае, так как источник определен?