Как я могу изменить привязку для элементов шаблона во время выполнения? - PullRequest
0 голосов
/ 25 мая 2010

Я нашел несколько решений, в которых предполагается, что у меня есть 2 или 3 связывающих объекта (или шаблона данных) - это не очень хорошее решение для меня. Есть простой способ сделать это? Я могу думать о циклическом просмотре визуального дерева и устанавливать привязку таким образом, но все же это решение выглядит не очень аккуратно.

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

1 Ответ

1 голос
/ 25 мая 2010

Вы можете написать собственное присоединенное свойство для этого, которое изменяет привязку, и прикрепить его к UIElelement, где вы хотите изменить привязку. Все, что вам нужно сделать сейчас, это инициировать изменение этого присоединенного свойства всякий раз, когда должна измениться привязка. В измененном свойстве eventhander вашего присоединенного свойства зависимости у вас есть доступ к UIElement.

<TextBlock local:Helper.DynamicBinding="{Binding SomeStatePropertyOfTheCurrentDataContext}" />

И в измененном методе обработчика событий:

private void OnDynamicBindingChanged(DependencyObject sender, PropertyChangedEventArgs args)
{
     var senderButton = sender as TextBlock;
     if((args.NewValue as string) == "MainText")
     {
        // bind to the property "MainText" of the current datacontext now 
     }
     else if((args.NewValue as string) == "OtherText")
     {
        // bind to the property "OtherText" of the current datacontext now 
     }
}

Однако, если вы столкнетесь с необходимостью изменения привязки во время выполнения, как это, есть вероятность, что ваш общий дизайн может быть улучшен!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...