kev*_*aub 6 .net wpf enums xaml enumeration
这个问题的一部分已经回答了如何将枚举作为命令参数绑定,但我需要更进一步.
我有一个链接到菜单的数据模板,每个菜单选项启动一个具有不同枚举值的命令.我该怎么做呢?我需要求助于传递一个字符串吗?
public enum TestEnum
{
First,
Second,
Third
}
Run Code Online (Sandbox Code Playgroud)
<DataTemplate>
<MenuItem Header="{Binding Path=.}" Command="{Binding ACommand}"
CommandParameter="{Binding Path=???}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
我希望第一个MenuItem绑定到Enum.First,第二个绑定到Enum.Second,依此类推.我想写这个,所以我只需要在菜单中编写一次数据模板而不是每个enum.value的菜单项.HTH.
我需要每个菜单项的命令参数不同.所以我将有3个菜单项,分别是第一个,第二个和第三个.
Tho*_*que 10
我不确定我是否理解你的要求......这就是你想要的吗?
CommandParameter="{Binding Path={x:Static local:TestEnum.First}}"
Run Code Online (Sandbox Code Playgroud)
编辑:好的,我想我现在明白了......如果你想要枚举值ItemsSource,你可以用a来做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);
}
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
如果你想为MenuItem 传递一个预定的枚举值(听起来像你这样做),你会这样做...(确保xmlns:local="..."也在你的xaml中导入)
<MenuItem ... CommandParameter="{x:Static local:TestEnum.First}" />
Run Code Online (Sandbox Code Playgroud)
您不需要在您要求的实例中为CommandParameter实际绑定任何内容(我认为).将值绑定到CommandParameter意味着CommandParameter的值可以变化,并且该值的源包含在其他地方,作为另一个元素的DepenedencyProperty上的值或DataContext中的CLR值.
| 归档时间: |
|
| 查看次数: |
7355 次 |
| 最近记录: |