gpt4 book ai didi

.net - 将枚举值作为命令参数传递

转载 作者:行者123 更新时间:2023-12-04 13:17:35 24 4
gpt4 key购买 nike

此问题的部分内容已在 how to bind to an enum as a command parameter 上得到解答,但我需要更进一步。

我有一个链接到菜单的数据模板,每个菜单选项都会启动一个具有不同枚举值的命令。我该怎么做呢?我需要求助于只传递一个字符串吗?

public enum TestEnum
{
First,
Second,
Third
}
<DataTemplate>
<MenuItem Header="{Binding Path=.}" Command="{Binding ACommand}"
CommandParameter="{Binding Path=???}" />
</DataTemplate>

我希望第一个 MenuItem 绑定(bind)到 Enum.First,第二个绑定(bind)到 Enum.Second,依此类推。我想写这个,这样我只需要在一个菜单中编写一次上面的数据模板,而不是为每个 enum.value 编写一个菜单项。 HTH。

我需要每个菜单项的命令参数不同。所以我将有 3 个菜单项,即第一个、第二个和第三个。

最佳答案

不确定我是否正确理解您的要求...这是您想要的吗?

CommandParameter="{Binding Path={x:Static local:TestEnum.First}}"

编辑:好的,我想我现在明白了......如果你想要枚举值作为 ItemsSource , 你可以用 ObjectDataProvider ,但是有一个更好的方法:编写一个标记扩展,它接受枚举的类型并返回值。

标记扩展
[MarkupExtensionReturnType(typeof(Array))]
public class EnumValuesExtension : MarkupExtension
{
public EnumValuesExtension()
{
}

public EnumValuesExtension(Type enumType)
{
this.EnumType = enumType;
}

[ConstructorArgument("enumType")]
public Type EnumType { get; set; }

public override object ProvideValue(IServiceProvider serviceProvider)
{
return Enum.GetValues(EnumType);
}
}

XAML
<MenuItem ItemsSource="{my:EnumValues EnumType=my:TestEnum}" Name="menu">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding}" />
<Setter Property="Command" Value="{Binding SomeCommand, ElementName=menu}" />
<Setter Property="CommandParameter" Value="{Binding}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>

关于.net - 将枚举值作为命令参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com