我有一个类“Uid_Id_Name”和一个枚举“E_UidIdName_Type”
public class Uid_Id_Name
{
public string Uid { get; set; } = "";
public string Id { get; set; } = "";
public string Name { get; set; } = "";
}
public enum E_UidIdName_Type
{
Name,
NameShort
}
我有一个组合框,他的项目是“Uid_Id_Name”
第一项:好的
第二项:“{x:Static my:E_UidIdName_Type.Name}”给我必须转换为字符串的错误
<ComboBox SelectedValuePath="Uid" ItemTemplate="{StaticResource Uid_Id_Name_Template}">
<ComboBox.Items >
<BaseMontanari:Uid_Id_Name Uid="testUID" Id="testID" Name="testNAME"/>
<BaseMontanari:Uid_Id_Name Uid="{x:Static my:E_UidIdName_Type.Name}" Id="testID2" Name="testNAME2"/>
</ComboBox.Items>
</ComboBox>
如何转换?
我看到了类似的问题,但没有一个是关于用枚举来评估类财产的
您不能在 CLR 属性上使用绑定。它必须是依赖属性。
您应该以编程方式设置数据项的值:
Uid_Id_Name item = cmb.Items[1] as Uid_Id_Name;
if (item != null)
item.Uid = E_UidIdName_Type.Name.ToString();
XAML:
<ComboBox x:Name="cmb" SelectedValuePath="Uid" DisplayMemberPath="Uid">
<ComboBox.Items>
<BaseMontanari:Uid_Id_Name Uid="testUID" Id="testID" Name="testNAME"/>
<BaseMontanari:Uid_Id_Name Id="testID2" Name="testNAME2"/>
</ComboBox.Items>
</ComboBox>
XAML 是一种标记语言。您可以使用 ItemTemplate
显示枚举值:
<ComboBox x:Name="cmb" SelectedValuePath="Uid">
<ComboBox.Items>
<BaseMontanari:Uid_Id_Name Uid="testUID" Id="testID" Name="testNAME"/>
<BaseMontanari:Uid_Id_Name Uid="{x:Null}" Id="testID2" Name="testNAME2"/>
</ComboBox.Items>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="{Binding Uid}" />
<Style.Triggers>
<DataTrigger Binding="{Binding Uid}" Value="{x:Null}">
<Setter Property="Text" Value="{Binding
Source={x:Static my:E_UidIdName_Type.Name}}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
如果你想这样做,你可以使用转换器。首先你应该创建一个像这样的:
[ValueConversion(typeof(E_UidIdName_Type), typeof(string))]
public class ToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value?.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后你必须在资源中包含你的转换器(不要忘记添加转换器的命名空间:
<UserControl.Resources>
<converters:ToStringConverter Name="ToStringConverter"/>
</UserControl.Resources>
在您的 ComboBox.Items 中:
<BaseMontanari:Uid_Id_Name Uid="{Binding Source={x:Static my:E_UidIdName_Type.Name}, Converter={StaticResource ToStringConverter}}" Id="testID2" Name="testNAME2"/>