Шаблон для «недоступного» значения при привязке данных в WPF - PullRequest
0 голосов
/ 06 августа 2009

Каков типичный шаблон для отображения «недоступного» значения при привязке данных в WPF?

Например, я использую MVVM, и TextBlock с моей точки зрения привязаны к свойствам моей модели представления, некоторые из которых int с. Бывают случаи, когда я хочу временно отобразить две черты («-») в моем представлении, а не значение свойства.

Я мог бы изменить свойство на строку, а затем в метод получения добавить некоторую логику, чтобы указать, возвращает ли оно значение или «-». Вероятно, это подходящий способ использовать MVVM, но есть ли более простые способы?

Есть ли способ воспользоваться TextBlock FallbackValue? Или есть другой подход для временного приостановления привязки данных и отображения «недоступного» значения?

Ответы [ 4 ]

3 голосов
/ 06 августа 2009

FallbackValue используется только в том случае, если путь привязки не может быть разрешен или преобразователь возвращает DependencyProperty.UnsetValue. Конвертеры обычно избегают при работе с MVVM. Мое предложение будет иметь два свойства, одно из которых содержит значение int, а другое содержит отображаемое значение:

public int SomeValue
{
    get { return _someValue; }
    set
    {
        if (_someValue != value)
        {
            _someValue = value;
            OnPropertyChanged("SomeValue");
            OnPropertyChanged("SomeValueDisplay");
        }
    }
}

public string SomeValueDisplay
{
    get { return _someValue == -1 ? "--" : _someValue.ToString(); }
}

Это дает вам лучшее из обоих миров. Ваша логика виртуальной машины работает со свойством int, но ваша TextBlock напрямую связана с представлением string базового int.

0 голосов
/ 06 августа 2009

вы можете использовать для свойства свойство null-значение int, а в привязке указать TargetNullValue = -.

Если вам все равно нужно исходное значение, вы можете использовать фактическое значение int в качестве резервного хранилища и использовать логику для определения, возвращать ли значение или ноль.

0 голосов
/ 06 августа 2009

WPF уже использует закулисные конвертеры (например, int в string) для отображения ваших значений в текстовых блоках. Если вы хотите изменить функциональность, вы можете предоставить простой пользовательский конвертер для обработки любого особого случая, о котором вы только можете подумать.

0 голосов
/ 06 августа 2009

Поскольку TextBlock уже отображает текст, почему бы просто не добавить пользовательский IMultiValueConverter к привязке, который возвращает "--" в случае, скажем, некоторого значения bool на ВМ?

...