如何在 WPF XAML 中将控件的哈希代码作为命令参数传递
本文关键字:代码 哈希 参数传递 命令 控件 WPF XAML | 更新日期: 2023-09-27 18:33:18
我有一个DataGridColumnHeader Sytle,因为我有一个用于过滤的按钮。我需要将按钮哈希代码作为命令参数传递
<Style TargetType="{x:Type DataGridColumnHeader}" x:Key="DummyFilterDataGridColumnHeader">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Button Command="{Binding Path=DataContext.FilterPopUpCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource MultiValueConverterKey}">
<Binding RelativeSource="{ RelativeSource Mode=FindAncestor,
AncestorType={x:Type cust:DataGrid}}" />
<Binding Path="Column"
RelativeSource="{RelativeSource Mode=TemplatedParent}" />
<Binding Path="HashCode" />
</MultiBinding>
</Button.CommandParameter>
</Button>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
注意:我的要求是仅从 XAML 传递哈希代码,而不是在 从按钮控件中提取 C#。
由于获取Button
HashCode
的唯一方法是通过GetHashCode()
方法,因此我建议您像这样将按钮本身的引用传递给命令:
<ControlTemplate TargetType="{x:Type DataGridColumnHeader}">
<Button x:Name="Btn" Command="{Binding Path=DataContext.FilterPopUpCommand,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource MultiValueConverterKey}">
<Binding RelativeSource="{ RelativeSource Mode=FindAncestor,
AncestorType={x:Type cust:DataGrid}}" />
<Binding Path="Column"
RelativeSource="{RelativeSource Mode=TemplatedParent}" />
<Binding ElementName="Btn" />
</MultiBinding>
</Button.CommandParameter>
</Button>
</ControlTemplate>
在 MultivalueConverter
中,提取哈希代码并将其传递给命令:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values==null)
return null;
var hashCode = (values[2] as Button).GetHashCode();
//the rest of your code
}