Добавление различных изображений в комбинированные списки в зависимости от значений привязки внутри - PullRequest
0 голосов
/ 17 февраля 2019

Я довольно новичок в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...