【发布时间】:2016-01-15 08:24:34
【问题描述】:
我急需帮助。
我的应用程序是在 WPF 中创建的,屏幕上有两个 itemcontrol,它们使用与 itemssource 相同的可观察集合。一个将元素布置在网格中,另一个将元素布置在基于列表中 x-y 变量的椭圆上。
但是,我在尝试实现以下内容时遇到了困难: 我想单击在椭圆或网格上生成的数据模板之一以选择它并让两个相应的元素发光或执行其他操作以指示选择。 (即,如果我单击网格中的模板,网格和椭圆都会做一些事情来表明该模板已被选中。)
现在,我已经能够在数据模板中保存使用这种类型的绑定单击的项目。有问题的 itemsource 包含在 ItemsSourceViewModel 中。
<StackPanel.InputBindings>
<MouseBinding Command="{Binding SelectImage}" CommandParameter="{Binding Path=.}" MouseAction="LeftClick"></MouseBinding>
</StackPanel.InputBindings>
那么绑定到鼠标点击的SelectImage Icommand就是这样实现的:
private ItemsSourceViewModel foo;
public SelectImage(ItemsSourceViewModel incoming)
{
this.foo = incoming;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
var obj = parameter as ImageTemplate;
foo.SelectedImage = obj;
}
所以现在我选择的对象保存在我的 ItemsSourceViewModel 实例中,但是我如何确定两个项目控件中的哪个模板已被选择以及如何应用触发器以显示它们已被选择?
请帮忙! :'(
【问题讨论】:
-
这是否是一个 ItemsControl 而不是像 ListBox 这样的 Selector 控件之一?
-
这与 uielement 的样式有关,因为该界面最初是只读的,但规范已扩展 :(。此外,使用选择器控件仍然不适用跨到其他项目控件的选择
-
使用选择器控件,您可以从两个控件对视图模型中的选定项目进行双向绑定,这将得到您想要的(应用选择)。如果 ListBox 是不可能的,您最终可能不得不自己实现选定的项目,您可能还需要它来处理其他内容。不应该太难,依赖属性和/或路由事件。
标签: wpf data-binding itemscontrol datatrigger