Как загрузить определенное изображение в представлении в зависимости от значения, возвращаемого свойством в ViewModel в WPF - PullRequest
0 голосов
/ 16 марта 2012

Я создаю пользовательский интерфейс в WPF, и мне нужно иметь элемент управления изображением в представлении, которое изменяется на конкретное изображение в зависимости от значения, возвращаемого из модели представления. В моем конкретном случае это просто светофор, поэтому он может быть красным, желтым или зеленым, и в зависимости от этого значения должно быть загружено соответствующее изображение.

так что в представлении у меня есть следующий элемент управления изображением ...

<Image Source="{Binding Path=ServerStatus, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" HorizontalAlignment="Left" Width="41" Height="34"/>

С другой стороны, ViewModel имеет этот код ...

    //...

     // The status of the server represented as a traffic light
    public enum m_Enumeration_ServerStatus { Red, Yellow, Green };

    private m_Enumeration_ServerStatus p_ServerStatus;

    //...

    /// <summary>
    /// The status of the server represented as a traffic light
    /// Red: stopped
    /// yellow: starting
    /// Green: Started
    /// </summary>
    public m_Enumeration_ServerStatus ServerStatus
    {
        get { return p_ServerStatus; }

        set
        {
            base.RaisePropertyChangingEvent("ServerStatus");
            p_ServerStatus = value;
            base.RaisePropertyChangedEvent("ServerStatus");
        }
    }

Таким образом, представление будет "проинформировано" о PropertyChange.

Какой код мне нужно добавить, чтобы загрузить соответствующее изображение для установленного значения свойства?

1 Ответ

0 голосов
/ 16 марта 2012

как насчет таблицы данных для типов enum? в табличке данных вы можете установить правильное изображение.

<DataTemplate DataType="{x:Type local:m_Enumeration_ServerStatus}">
<TextBlock x:Name="valueText"/>
<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding}" Value="{x:Static local:m_Enumeration_ServerStatus.Red}">
        <Setter TargetName="valueText" Property="Text" Value="First Value" />
    </DataTrigger>
</DataTemplate.Triggers>
<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding}" Value="{x:Static local:m_Enumeration_ServerStatus.Red}}">
        <Setter TargetName="valueText" Property="Text" Value="Second Value" />
    </DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>

вместо текстового блока вы должны установить свой образ, конечно,

...