我动态创建一些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属性的最佳方法是什么。
答案 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