如何检测动态创建的绑定的发送者(按钮)

时间:2011-09-20 08:18:04

标签: wpf data-binding dynamic

我动态创建一些RibbonButtons并根据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 :(得分:0)

默认情况下,datacontext是Viewmodel的上下文。添加了按钮的RibbonGroup在设计时在xaml文件中创建。我使用那个结构:

MyHost.ribGrpExtern.Items.Add(rBtn);

添加按钮。它可能不符合mvvm模式。可能是其他人有更好的想法来实现它。

我为我的问题here找到了解决方案并使用了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