Переопределить значение из привязки данных через прикрепленное свойствоC#

Место общения программистов C#
Ответить
Anonymous
 Переопределить значение из привязки данных через прикрепленное свойство

Сообщение Anonymous »

У меня есть элемент управления с привязкой к свойству Visibility. Я хотел бы переопределить привязку и скрыть элемент управления всякий раз, когда пользователю не хватает определенного разрешения.
Мультипривязка могла бы быть вариантом, но это довольно многословно и потребует преобразователя, который объединяет значения видимости; эти проверки разрешений являются довольно детальными и разбросаны по всей базе кода, поэтому размер кода значительно увеличится, что несколько ухудшит читабельность.
В поисках более чистого решения я создал прикрепленное свойство, которое оценивает разрешение и принудительно устанавливает значение видимости в значение «Свернуто», если разрешение недоступно:
MainWindow.xaml: MainWindow.xaml.cs:

Код: Выделить всё

public partial class MainWindow : Window
{
public MainWindow()
{
DataContext = new ViewModel();
InitializeComponent();
}
}

public class ViewModel : INotifyPropertyChanged
{
public Visibility ButtonVisibility => Visibility.Visible;
public event PropertyChangedEventHandler? PropertyChanged;
}

public static class Permission
{
public static readonly DependencyProperty HideProperty =
DependencyProperty.RegisterAttached(
"Hide",
typeof(bool),
typeof(Permission),
new PropertyMetadata(false, OnHideChanged));

public static bool GetHide(DependencyObject d) => (bool)d.GetValue(HideProperty);
public static void SetHide(DependencyObject d, bool value) => d.SetValue(HideProperty, value);

private static void OnHideChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue && d is UIElement element)
element.SetValue(UIElement.VisibilityProperty, Visibility.Collapsed);
}
}
К сожалению, это не работает, если также есть привязка к свойству Visibility:
Изображение

Обе кнопки должны быть скрыты.
Я подозреваю, что это связано с привязка выполняется только после выполнения прикрепленного свойства.
Как я могу надежно переопределить привязку и обеспечить видимость через прикрепленное свойство?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»