Измените обязательное свойство mvvm, используя триггеры в wpf - PullRequest
0 голосов
/ 05 сентября 2011

Я пытаюсь понять, возможно ли изменить свойство привязки элемента управления с помощью триггеров ...

Таким образом, у меня есть два свойства, например, во ViewModel, и использование триггера в зависимости от того, является ли первое свойство пустым, элемент управления будет связывать первое свойство, если оно не равно нулю, или связывать второе.

Этого можно добиться? Будет ли работать с командами тоже?

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 05 сентября 2011

Я, как правило, не рекомендовал бы попробовать это.Другой, более чистый, IMO подход заключается в использовании триггера для изменения видимости рассматриваемого объекта.

Это позволяет свернуть элемент управления и создать другой, с соответствующей настройкой привязки, видимой на основепара триггеров.Преимущество здесь в том, что вам не нужно постоянно обновлять привязки, плюс ваш интерфейс имеет соотношение 1-1 со свойствами в вашей ViewModel.

Это также будет работать с командами, как с вашим командным объектом(т. е. кнопка) может быть просто переключена на новую.

0 голосов
/ 06 сентября 2011

Может быть, вы можете использовать связывание с ValueConverter:

<MultiBinding Converter="{StaticResource MyConverter}">
    <Binding Path="FirstProperty" />
    <Binding Path="SecondProperty" />
</MultiBinding>

MyConverter должен оценить и вернуть правильное свойство:

public class MyConverter: IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values[0] ?? values[1];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}
0 голосов
/ 06 сентября 2011

Почему PriorityBinding не может удовлетворить это требование?

0 голосов
/ 05 сентября 2011

Было бы проще иметь одно свойство в вашей ViewModel, которое предоставляет значение первого свойства, если оно не равно нулю, иначе значение второго свойства.Что-то вроде:

public String BindToMe {
    get { return FirstProperty ?? SecondProperty; }
}

Будет ли это работать для вас?

...