Первый код, что я начиная с:Динамическое связывание с «Path» ресурса
<ribbon:RibbonMenuButton IsEnabled="{Binding ForegroundIsConfigurable}"
SmallImageSource="{Binding Source={StaticResource imageSource},
Path=Source,
UpdateSourceTrigger=OnPropertyChanged}">
Хотя это связывание компилирует и отлично работает причину я не удовлетворен является то, что imageSource
изменения во время выполнения.
StaticResource Markup Extension : Provides a value for any XAML property attribute by looking up a reference to an already defined resource. Lookup behavior for that resource is analogous to load-time lookup, which will look for resources that were previously loaded from the markup of the current XAML page as well as other application sources, and will generate that resource value as the property value in the run-time objects.
Так как изменение imageSource
значение во время выполнения я должен был изменить StaticResource
к DynamicResource
. Но свойство Source
не является свойство зависимостей и, таким образом, следующий код вызовет ошибку во время выполнения:
SmallImageSource="{Binding Source={DynamicResource imageSource},
Path=Source,
UpdateSourceTrigger=LostFocus}
По этой причине, мне нужно, чтобы связать динамический ресурс непосредственно SmallImageSource
, который является свойством зависимости:
SmallImageSource="{DynamicResource imageSource}"
Это снова вызовет ошибку времени выполнения, поскольку imageSource
является типом Image
. SmallImageSource
ожидает, что значение будет ImageSource
.
Теперь можно предложить установить контекст данных в свой динамический ресурс и соответствующим образом привязать его. Если я это сделаю, я убью привязку свойства IsEnabled
, у которого есть еще DataContext
.
И, насколько я знаю, MultiBinding
также не является решением, поскольку это обеспечивает механизм привязки свойства к нескольким источникам, но не обеспечивает привязки разных свойств к различным контекстам и источникам.
Задумываясь о том, как это сделать, мне пришло в голову, что, к счастью, я могу переместить ImageSource
rigmarole в IValueConverter
. В данном контексте данных моего RibbonMenuButton
у меня есть строковое значение с соответствующим значением, которое на самом деле также является источником моего ImageSource
.
Во всяком случае, мне все же интересно, как бы я решил проблему, если бы у меня не было другого подхода, т. Е. Если оба источника были в разных контекстах данных. Есть ли что-то, чего я не вижу? Как я могу гарантировать, чтобы не убить другое связывание, перезаписав DataContext
и хотя привязав к свойству динамического ресурса?
imageSource
довольно так же, как в примере XAML на DrawingImage msdn page.
<Image x:Key="imageSource">
<Image.Source>
<DrawingImage>
...
Можете ли вы разместить код, на котором вы определяете ресурс imageSource? –