我得到了以下矩形
_dbset.Add(user)
矩形绑定到在上面的ItemsControl中声明的模型。文档结构如下:
<Rectangle
Width="{Binding Width}"
Height="{Binding Length}"
Tag="{Binding Id}"
Name="rectangleDrawnMachine">
<i:Interaction.Triggers>
<i:EventTrigger
EventName="MouseDown">
<cmd:EventToCommand
Command="{Binding Main.UpdateSelectedMachine, Mode=OneWay, Source={StaticResource Locator}}"
PassEventArgsToCommand="True"
CommandParameter="{Binding ElementName=rectangleDrawnMachine}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Rectangle>
现在我的 UpdateSelectedMachine - 命令至少需要三个矩形属性:
使用矩形本身的CommandParameter,我的命令将获得有关矩形的许多信息(如必要的标记)。但它没有得到关于画布(X-和Y-)位置的必要信息。
所以我的问题是:如何在我的rectangle-command上使用multibinding?以及如何转移画布的位置?
答案 0 :(得分:2)
使用命令参数无法传递多个值。
为此,您必须使用多重绑定。
<cmd:EventToCommand
Command="{Binding Main.UpdateSelectedMachine, Mode=OneWay, Source={StaticResource Locator}}"
PassEventArgsToCommand="True">
<cmd:EventToCommand.CommandParameter>
<MultiBinding Converter="{StaticResource YourConverter}">
<Binding Path="Canvas.Left" ElementName="canvasDrawnMachines"/>
<Binding Path="Canvas.Top" ElementName="canvasDrawnMachines"/>
<Binding Path="Tag" ElementName="canvasDrawnMachines"/>
</MultiBinding>
</cmd:EventToCommand.CommandParameter>
您的转换器:
public class YourConverter : IMultiValueConverter
{
public object Convert(object[] values, ...)
{
return values.Clone();
}
}
然后,执行命令逻辑:
public void OnExecute(object parameter)
{
var values = (object[])parameter;
var left = (double)values[0];
var top = (double)values[1];
var tag = values[2];
}
答案 1 :(得分:1)
您可以将作为命令参数传递的Canvas.Left
的{{1}}和Canvas.Top
附加属性的值获取到命令中,如下所示:
Rectangle
你知道如何以XAML方式获得这个位置吗?
将double x = Canvas.GetLeft(rectangle);
double y = Canvas.GetTop(rectangle);
与转化器一起使用并绑定到MultiBinding
和Canvas.Left
属性:
Canvas.Top