Поскольку значение кнопки является атрибутом, необходимо использовать .attr () метод в jQuery. Это должно сделать это
, можно также использовать attr для установки атрибутов, больше информации в документах .
, Это только работает в JQuery 1.6 +. См. ответ postpostmodern для более старых версий.
Проблема не имеет ничего общего с MultiBinding
или вашим конвертером. DependencyProperty.UnsetValue
означает, что привязка не имеет значения. И действительно, если вы работаете в режиме отладки, вы можете увидеть ошибки привязки в окне Output
:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsConnected; DataItem=null; target element is 'SolidColorBrush' (HashCode=17654054); target property is 'Color' (type 'Color')
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=IsLoggedIn; DataItem=null; target element is 'SolidColorBrush' (HashCode=17654054); target property is 'Color' (type 'Color')
Итак, давайте немного упростим разметку и применим некоторые средства диагностики:
<GroupBox>
<GroupBox.BorderBrush>
<SolidColorBrush>
<SolidColorBrush.Color>
<Binding Path="GroupColor" PresentationTraceSources.TraceLevel="High"/>
</SolidColorBrush.Color>
</SolidColorBrush>
</GroupBox.BorderBrush>
</GroupBox>
Применение прикрепленного свойства зависимости PresentationTraceSources.TraceLevel
дает еще один результат:
System.Windows.Data Warning: 52 : Created BindingExpression (hash=17654054) for Binding (hash=44624228)
System.Windows.Data Warning: 54 : Path: 'GroupColor'
System.Windows.Data Warning: 56 : BindingExpression (hash=17654054): Default mode resolved to OneWay
System.Windows.Data Warning: 57 : BindingExpression (hash=17654054): Default update trigger resolved to PropertyChanged
System.Windows.Data Warning: 58 : BindingExpression (hash=17654054): Attach to System.Windows.Media.SolidColorBrush.Color (hash=52727599)
System.Windows.Data Warning: 60 : BindingExpression (hash=17654054): Use Framework mentor <null>
System.Windows.Data Warning: 63 : BindingExpression (hash=17654054): Resolving source
System.Windows.Data Warning: 65 : BindingExpression (hash=17654054): Framework mentor not found
System.Windows.Data Warning: 61 : BindingExpression (hash=17654054): Resolve source deferred
System.Windows.Data Warning: 91 : BindingExpression (hash=17654054): Got InheritanceContextChanged event from SolidColorBrush (hash=52727599)
System.Windows.Data Warning: 63 : BindingExpression (hash=17654054): Resolving source
System.Windows.Data Warning: 66 : BindingExpression (hash=17654054): Found data context element: GroupBox (hash=51393439) (OK)
System.Windows.Data Warning: 67 : BindingExpression (hash=17654054): DataContext is null
System.Windows.Data Warning: 91 : BindingExpression (hash=17654054): Got InheritanceContextChanged event from SolidColorBrush (hash=52727599)
System.Windows.Data Warning: 63 : BindingExpression (hash=17654054): Resolving source
System.Windows.Data Warning: 65 : BindingExpression (hash=17654054): Framework mentor not found
System.Windows.Data Warning: 63 : BindingExpression (hash=17654054): Resolving source
System.Windows.Data Warning: 65 : BindingExpression (hash=17654054): Framework mentor not found
System.Windows.Data Warning: 63 : BindingExpression (hash=17654054): Resolving source (last chance)
System.Windows.Data Warning: 65 : BindingExpression (hash=17654054): Framework mentor not found
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=GroupColor; DataItem=null; target element is 'SolidColorBrush' (HashCode=52727599); target property is 'Color' (type 'Color')
Мы видим, что привязка не находит DataContext
, и привязка не выполняется. Когда я изменяю конструктор Windows так, чтобы DataContext
был установлен перед инициализацией содержимого, привязка работает:
public Window1()
{
DataContext = ...;
InitializeComponent();
}
Что странно, поскольку для привязок в других местах это не имеет значения. Не уверен, почему это не так Я там не работаю, поэтому могу предложить только обходные пути. Например, работает создание кисти в качестве ресурса с привязками (этот ресурс также может быть локальным для GroupBox
):
<GroupBox BorderBrush="{DynamicResource resbrush}">
<GroupBox.Resources>
<SolidColorBrush x:Key="resbrush">
<SolidColorBrush.Color>
<MultiBinding Converter="{StaticResource ConnectionAndLoggedInToBorderBrush}">
<Binding Path="IsConnected"/>
<Binding Path="IsLoggedIn"/>
</MultiBinding>
</SolidColorBrush.Color>
</SolidColorBrush>
</GroupBox.Resources>
</GroupBox>
Я бы посоветовал отказаться от MultiBinding
и для предварительной обработки в DataContext
, если ваш класс UIManager
является своего рода MVVM
ViewModel
.
Именно по таким причинам вы можете захотеть изучить MVVM. Этот шаблон помогает вам абстрагироваться от модели и привязок, чтобы вам не приходилось так сильно полагаться на DP - вместо этого вы можете просто привязать к уведомляемому свойству в модели представления.
Есть несколько отличных статей по MVVM, поэтому я предлагаю вам начать с чтения работ Карла Шиффлетта, Джоша Смита, Марлона Греча и Саши Барбер.