WPF: иерархия привязки - PullRequest
       5

WPF: иерархия привязки

1 голос
/ 09 марта 2010

Я определил привязку по умолчанию в моем стиле.

Например, я настроил привязку видимости моей кнопки так, чтобы она не была видна, если соответствующая команда не может быть выполнена.

Это мое поведение привязки по умолчанию .

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

Я хочу объединить две привязки так, чтобы, если кто-либо из них скажет «это не видно», он не будет виден! Другими словами, возможно ли создать иерархию поведения привязки ? Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

используйте MultiBinding , чтобы соединить все различные привязки в XAML, и напишите свой собственный IMultiValueConverter , который расставляет приоритеты / и / или присваивает каждому значению, как вам нравится. Вы не можете использовать MultiBinding без IMultiValueConverter (или StringFormat, но это бесполезно для вас)

Обратите внимание, что PriorityBinding - это НЕ то, что вы ищете здесь.

вот значение ValueConverter, которое вы можете использовать:

[ValueConversion(typeof(bool), typeof(Visibility))]
public class BooleansAndToVisibilityMultiValueConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        Func<bool, bool, bool> aggregator = (x, y) => x && y;
        bool aggregate = values.Cast<bool>().Aggregate(aggregator);
        return aggregate ? Visibility.Visible : Visibility.Collapsed;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException();
    }
}
1 голос
/ 09 марта 2010

Нет, извините, в XAML это невозможно.

Вы МОЖЕТЕ сделать эту комбинацию в коде. Для этого вы можете написать BindingConverter.

...