Как определить отправителя (кнопку) динамически создаваемых привязок - PullRequest
0 голосов
/ 20 сентября 2011

Я динамически создаю несколько кнопок RibbonButton и добавляю их в группу в соответствии с XML-файлом.Следующая функция выполняется так же часто, как и записи, найденные в файле xml.

private void ExtAppsWalk(ExternalAppsXml p, AppsWalkEventArgs args)
    {

            RibbonButton rBtn = new RibbonButton();
            rBtn.Name = args.Name;
            Binding cmdBinding = new Binding("ExtAppCommand");
            rBtn.SetBinding(RibbonButton.CommandProperty, cmdBinding);

            Binding tagBinding = new Binding("UrlTag");
            tagBinding.Mode = BindingMode.OneWayToSource;
            rBtn.SetBinding(RibbonButton.TagProperty, tagBinding);

            rBtn.Label = args.Haed;
            rBtn.Tag = args.Url;

            rBtn.Margin = new Thickness(15, 0, 0, 0);

            MyHost.ribGrpExtern.Items.Add(rBtn);

    }

Я пытался использовать свойство Tag для хранения URL-адресов, которые должны запускаться при нажатии соответствующей кнопки.К сожалению, привязка к свойству Tag дает мне только последний вставленный URL.Как лучше всего определить, какая кнопка нажата, или обновить свойство Tag.

1 Ответ

0 голосов
/ 21 сентября 2011

Текст данных по умолчанию является контекстом модели представления. Группа лент, к которой добавляются кнопки, создается в файле xaml во время разработки. Я использую эту конструкцию:

MyHost.ribGrpExtern.Items.Add(rBtn);

чтобы добавить кнопки. Это может не соответствовать шаблону mvvm. Может быть, у кого-то есть лучшая идея осуществить это.

Я нашел решение для моей проблемы здесь и использую класс RelayCommand. Поэтому я могу передавать объекты (мой URL) в CommandHandler.

RibbonButton rBtn = new RibbonButton();

rBtn.Name = args.Name;
Binding cmdBinding = new Binding("ExtAppCommand");
rBtn.SetBinding(RibbonButton.CommandProperty, cmdBinding);
rBtn.CommandParameter = (object)args.Url;



private void ExtAppFuncExecute(object parameter)
{

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