Dirk Bahle
Я не совсем уверен что вы подразумеваете под пустой ячейкой поэтому я не могу дать точное решение вашей менее точной постановки проблемы но у вас есть по крайней мере 3 варианта для изучения:
1> используйте резервную опцию привязки:
Вы можете указать, чтобы показать определенный элемент данных, когда обычный элемент данных недоступен:
Привязки WPF FallbackValue комплект для связывания - переполнение стека[^]
- Либо используйте FallbackValue как показано в разделе Вопрос связанной страницы или используйте альтернативную привязку через
PriorityBinding
показано в разделе ответов.
2> используйте конвертер: вы всегда можете использовать statndard
IValueConverter
чтобы сделать по существу ту же логику отображения значения по умолчанию, что и в 1>. Разница в том, что конвертер представляет собой фрагмент кода C#/VB.Net, который дает вам возможность интегрировать различные и более крупные сценарии, если вы видите много разных случаев и хотите реагировать на них по-разному.
3> An
IMultiValueConverter
дает вам наибольшую гибкость и возможности для привязки из нескольких источников и преобразования значений в общий формат. Вот пример, который я только что набрал (не скомпилировал его) - он принимает строку и логическое значение (например, IsEnabled) в качестве входных данных и преобразует их в строку.
[ValueConversion(typeof(string), typeof(string))]
public class ItemTypeDisplayNameToTextConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values == null)
return Binding.DoNothing;
if (values.Length != 2)
return Binding.DoNothing;
var item = values[0] as string;
if (item == null)
return Binding.DoNothing;
if (values[1] is bool == false)
return Binding.DoNothing;
bool isEnabled = (bool)values[1];
if (isEnabled == false) // The cell was not enabled
return string.Empty;
if (string.IsNUllOrEmtpy(item)) // There was no string being successfully bound
return string.Empty;
return item;
}
object[] IMultiValueConverter.ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Вы можете скачать пример решения, установить точку останова в конвертере и запустить демонстрацию, если хотите увидеть, как это работает на месте:
InplaceEditBoxLib/ItemTypeDisplayNameToTextConverter.cs at master · Dirkster99/InplaceEditBoxLib · GitHub[
^]
Надеюсь, это поможет. Дайте мне знать, если вы смогли решить свою проблему или если вы видите другую проблему.
Dirk Bahle
Нет проблем, рад слышать, что это помогло - Вы должны установить звезды для ответа, чтобы указать ответ для других, которые могут искать решение той же проблемы ...