Я довольно новичок в WPF и c #.Я закодировал простую форму с полем со списком, и я добавил изображение в это поле со списком, который будет находиться рядом с текстом.Изображение будет меняться в зависимости от пола человека в классе.
Я просто хочу знать, является ли это правильной практикой для выполнения чего-то подобного или есть лучший путь, по которому я должен идти?
Мой код работает так, как я этого хочу, но я согласен, что учусь плохой практике.
Я использовал отдельное свойство, чтобы определить URL для изображения, которое, по его мнению, не лучший способподходите к этому вопросу.
Любые указатели были бы очень полезны.
Спасибо,
public partial class MainWindow : Window
{
private List<Person> people = new List<Person>();
public MainWindow()
{
InitializeComponent();
people.Add(new Person { Firstname = "Sinead", Lastname = "McCoy" , Sex = "Female" });
people.Add(new Person { Firstname = "Andrew", Lastname = "Warner", Sex = "Other" });
people.Add(new Person { Firstname = "Ailish", Lastname = "Man" , Sex = "Female" });
people.Add(new Person { Firstname = "Andrew", Lastname = "McCory", Sex = "Other" });
people.Add(new Person { Firstname = "Andrew", Lastname = "McCall" , Sex = "Male" });
//people.Add(a);
cmbMyComboBox.ItemsSource = people;
}
Ниже приведен мой класс Person:
class Person
{
private string _sex;
private string _cmbimage;
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Sex
{
get
{
var sex = new string[] { "Male", "Female" };
if (sex.Contains(_sex))
{
return _sex;
}
else
_sex = "Other";
return _sex;
}
set
{
_sex = value;
}
}
public string Fullname
{
get
{
return $"{Firstname} {Lastname}";
}
}
public string Cmbimage
{
get
{
if (_sex == "Male")
{
_cmbimage = "C:\\Users\\richa\\Pictures\\Icons\\WPFdemo\\cmbimage.png";
return _cmbimage;
}
if (_sex == "Female")
{
_cmbimage = "C:\\Users\\richa\\Pictures\\Icons\\WPFdemo\\cmbimagegirl.png";
return _cmbimage;
}
else
_cmbimage = "C:\\Users\\richa\\Pictures\\Icons\\WPFdemo\\cmbimageother.png";
return _cmbimage;
}
}
}
Вот мой Xaml для поля со списком:
<ComboBox x:Name="cmbMyComboBox" Grid.Column="1"
Grid.Row="3" Grid.ColumnSpan="2" Margin="10">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Cmbimage}" Height="20" Width="20"/>
<TextBlock Text="{Binding Fullname}"/>
<!--<TextBlock Text=" "/>
<TextBlock Text="{Binding Lastname}"/>
<TextBlock Text=" "/>
<TextBlock Text="{Binding Sex}"/>-->
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
РЕДАКТИРОВАТЬ:
class Person
{
private Uri _cmbimage;
public Uri Cmbimage
{
get
{
if (_sex == "Male")
{
_cmbimage = new Uri("pack://application:,,,/Images/cmb_male.png");
return _cmbimage;
}
if (_sex == "Female")
{
_cmbimage = new Uri("pack://application:,,,/Images/cmb_female.png");
return _cmbimage;
}
else
_cmbimage = new Uri("pack://application:,,,/Images/cmb_other.png");
return _cmbimage;
}
}
}
РЕДАКТИРОВАТЬ ДАННЫЕ XAML:
<Window.Resources>
<BitmapImage x:Key="Image1" UriSource="pack://application:,,,/Images/cmb_Male.png"/>
<BitmapImage x:Key="Image2" UriSource="pack://application:,,,/Images/cmb_Female.png"/>
<BitmapImage x:Key="Image3" UriSource="pack://application:,,,/Images/cmb_Other.png"/>
</Window.Resources>
<ComboBox x:Name="cmbMyComboBox" Grid.Column="1"
Grid.Row="3" Grid.ColumnSpan="2" Margin="10">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image x:Name="image" Height="20" Width="20"/>
<TextBlock Text="{Binding Fullname}"/>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Sex}" Value="Male">
<Setter TargetName="image" Property="Source"
Value="{StaticResource Image1}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Sex}" Value="Female">
<Setter TargetName="image" Property="Source"
Value="{StaticResource Image2}"/>
</DataTrigger>
<DataTrigger Binding="{Binding Sex}" Value="Other">
<Setter TargetName="image" Property="Source"
Value="{StaticResource Image3}"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>