gpt4 book ai didi

c# - 根据对象枚举值将图像绑定(bind)到 ComboBox

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:33 24 4
gpt4 key购买 nike

我有一个 Character Class,它的 Gender 属性是一个枚举。我想要我的代码做的是根据我的角色的性别切换图像(如果角色是男性 = 男性形象)。

我遇到的问题是如何正确访问和获取此枚举值。你看,我正在创建一个 Character 类型的 ObservableCollection。然后我将此集合绑定(bind)到 ComboBox,然后通过 ItemTemplate 显示 DisplayMemberPath。

我相信我做的所有绑定(bind)都是正确的,但我没有在我的值转换器中正确访问 Character Gender 属性。

XAML:引用转换器 && ComboBox

xmlns:converters="clr-namespace:ImageViaGenderTest_2014"
Title="MainWindow" Height="350" Width="1004.932">
<Window.Resources>
<converters:GenderToIconFilenameConverter x:Key="IconConverter"/>
</Window.Resources>


<ComboBox x:Name="Character_ComboBox" HorizontalAlignment="Left" VerticalAlignment="Top" Width="328" Height="25">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Width="50" Text="{Binding Name}"/>
<TextBlock Width="50" Text="{Binding Level}"/>
<Image Source="{Binding Gender, Converter={StaticResource IconConverter}}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

MainWindow 中的 Observable 集合设置

  public ObservableCollection<Character> squad_members = new ObservableCollection<Character>();

public MainWindow()
{
InitializeComponent();

squad_members.Add(new Character() { Name = "john_snow_knows_nothing", Level = 8, _Gender = Gender.Male});
squad_members.Add(new Character() { Name = "Ygritt_gets_wrecked", Level = 4, _Gender = Gender.Female});

Binding comboBinding = new Binding();
comboBinding.Source = squad_members;

BindingOperations.SetBinding(Character_ComboBox, ComboBox.ItemsSourceProperty, comboBinding);
}

自定义值转换器类(我认为我错误地引用了性别枚举)错误区域:

[ValueConversion(typeof(Gender), typeof(Image))]
public class GenderToIconFilenameConverter : IValueConverter
{

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
switch ((Gender)value)
{
case Gender.Female:
return "character1.jpg";
case Gender.Male:
return "character2.jpg";
default:
return null;
}

}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}

字符类:

public class Character 
{
public string Name { get; set; }
public int Level { get; set; }
public Gender _Gender { get; set; }
}

性别枚举:

public enum Gender
{
Male, Female
}

我是否错误地引用了我的角色性别枚举?或者还有什么我忘了?我也从这个问题中得到了帮助: Bind Icon depending on Enum in WPF Treeview

最佳答案

在纯xaml中有一个解决方案

    <ComboBox x:Name="Character_ComboBox"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Width="328"
Height="25">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Width="50"
Text="{Binding Name}" />
<TextBlock Width="50"
Text="{Binding Level}" />
<Image x:Name="gender" />
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding _Gender}"
Value="Female">
<Setter Property="Source"
TargetName="gender"
Value="character1.jpg" />
</DataTrigger>
<DataTrigger Binding="{Binding _Gender}"
Value="Male">
<Setter Property="Source"
TargetName="gender"
Value="character2.jpg" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

这种方法不需要任何转换器,当您的选择较少时,这会更有用。

这里发生的事情是我们在模板上指定了 DataTrigger,我们检查 Gender 属性的值,当它满足特定条件时,我们相应地设置图像源。

关于c# - 根据对象枚举值将图像绑定(bind)到 ComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25499717/

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