我在View XAML中有以下内容
<GroupBox Grid.Row="0" Header="Aktionen bei Prüfung Aufbau">
<ContentControl Content="{Binding BuildUpActions}" ContentTemplate="{StaticResource FullActionListTemplate}" x:Name="BuildUp"/>
</GroupBox>
<GroupBox Grid.Row="1" Header="Aktionen bei Prüfung Abbau">
<ContentControl Content="{Binding TearDownActions}" ContentTemplate="{StaticResource FullActionListTemplate}" x:Name="TearDown"/>
</GroupBox>
DataTemplate在单独的资源中定义
<DataTemplate x:Key="FullActionListTemplate">
<DockPanel LastChildFill="True">
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Content="Neuer Ausgang" Style="{StaticResource ButtonRowStyle}"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=DataContext.NewFullIOCommand}"
CommandParameter="{Binding **?HOW?**}"
/>
<more buttons here...>
</StackPanel>
<ContentControl Content="{Binding}" >
</ContentControl>
</DockPanel>
</DataTemplate>
Command在ViewModel中定义
public ICommand NewFullIOCommand
{
get
{
if (this._newFullIOCommand == null)
{
this._newFullIOCommand = new Mvvm.RelayCommand(parm => DoNewFullIO(parm));
} return this._newFullIOCommand;
}
}
我希望能够确定2个列表中的哪个列表生成了Command。我想将CommandParameter传递给命令处理程序,该处理程序包含x:控件的名称。
如何定义绑定?还有更好的方法吗?
答案 0 :(得分:3)
我查看了您的示例,并快速编辑了读取CommandParameter的行。执行此更改后,我在Snoop(WPF运行时调试程序)中检查了此项,并将CommandParameter设置为您所描述的要应用的值。
首先,你可以在这里获得Snoop:
我可以通过简单的方式将CommandParameter设置为封闭的ContentControl的名称:
<DataTemplate x:Key="FullActionListTemplate">
<DockPanel LastChildFill="True">
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Content="Neuer Ausgang"
Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TabControl}}, Path=DataContext.NewFullIOCommand}"
CommandParameter="{Binding Path=Name, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContentControl}}}"
/>
</StackPanel>
<ContentControl Content="{Binding}" >
</ContentControl>
</DockPanel>
</DataTemplate>
作为旁注,您的示例几乎在上面的行中包含一个类似的技术,您将绑定到Command属性。
答案 1 :(得分:0)
创建自引用属性
我讨厌WPF。但是,我刚刚这样做:将此属性添加到绑定的datamodel类:
public class MyDataObjectItem
{
//...
public MyDataObjectItem Self { get { return this; } }
//...
}
然后命令参数很简单:
CommandParameter="{Binding Self}"
或者,显然这是有效的
CommandParameter="{Binding}"