1

顧客、会社、または従業員の情報を表示するプログラムがあります。この画像の横にアイコンを表示したいと思います。アイコンは、表示している情報の種類 (顧客、会社、または従業員) に基づいて変化します。

イメージを指定するために、リソース ディクショナリに次のように設定しています。

<ImageSource x:Key="CompanyIcon">../Images/companies_32.png</ImageSource>
<ImageSource x:Key="EmployeeIcon">../Images/employee_32.png</ImageSource>
<ImageSource x:Key="CustomerIcon">../Images/customer_32.png</ImageSource>

ビューモデルでは、使用しているデータ型に基づいて画像を割り当てたいと考えています。たとえば、会社の情報 (EF 4.5 を使用した「Company」タイプの DBContext) を表示している場合、画像を「CompanyIcon」の画像に設定したいと考えています。

ビューモデルを使用して画像を割り当て (そして、「会社」、「従業員」、または「顧客」DBContext タイプの間で変更するときにそれを変更し)、この画像をビュー内のプレースホルダーにバインドするにはどうすればよいですか (それはビュー内に表示されますグリッド列)。

4

2 に答える 2

3

オブジェクト型に基づいてDataTriggerを設定するを使用し、型を取得するためにを返す Converter を使用します。Image.Sourcetypeof(value)

<Style x:Key="MyStyle" TargetType="{x:Type Image}">
    <!-- Default Value -->
    <Setter Property="Source" Value="{StaticResource CompanyIcon}" />

    <Style.Triggers>
        <DataTrigger Binding="{Binding Converter={StaticResource ObjectToTypeConverter}}" 
                     Value="{x:Type local:Employee}">
            <Setter Property="Source" Value="{StaticResource EmployeeIcon}" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Converter={StaticResource ObjectToTypeConverter}}" 
                     Value="{x:Type local:Customer}">
            <Setter Property="Source" Value="{StaticResource CustomerIcon}" />
        </DataTrigger>
    </Style.Triggers>
</Style>

私が通常使用するコンバーターは次のようになります。

public class ObjectToTypeConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value == null)
            return null;

        return value.GetType();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}
于 2012-11-13T21:01:20.253 に答える
0

私がしたことは、VMに画像の場所を指す文字列プロパティを設定することでした(これが最善のアプローチかどうかはわかりませんが、私にとっては非常にうまく機能しました)。

private string _imageSource;
public string ImageSource 
{
   get
   {
     return _imageSource;
   }
   set
   {
      _imageSource = value;
      NotifyPropertyChanged(() => ImageSource);
   }

}

public void SetImage()
{
    If (customer)
        ImageSource = "../Images/companies_32.png";
    ...
}

XAMLの場合:

<Image Source="{Binding ImageSource}" .../>
于 2012-11-13T19:54:33.630 に答える