5

プロジェクトのリソースとして、従業員 ID とその従業員に関連付けられた画像があります (画像は従業員名の横のリストに表示されています)。

だから私はこのようなことを考えます

<DataTemplate DataType="{x:Type m:Employee}">
        <Grid>
            <Image Grid.Column="0" Name="image" Source="../Images/{Binding Path=Id}.jpg"/>

有効な XAML ではありません。

コードビハインドでデータバインディングイベントを処理して、そこにパスを作成できると思いますか? 私には理想的ではないようです。

パスを Employee クラスに保存できましたが、それはひどいものです。

4

1 に答える 1

9

あなたは使用する必要がありますIValueConverter

String.Formatコンバーターのパラメーターとしてa を渡す簡単な例を次に示します。

public class StringFormatToImageSourceConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (parameter is string)
        {
            return string.Format(parameter.ToString(), value);
        }
        return null;
    }

    public object ConvertBack(object value, Type targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}

使用法:

<XXXX.Resources>
    <local:StringFormatToImageSourceConverter x:Key="StringToImage" />
</XXXX.Resources>

<Image Source="{Binding Path=Id, Converter={StaticResource StringToImage}
     , ConverterParameter=../Images/{0}.jpg}" />

Xaml非表示を使用して文字列をフォーマットすることですべてを保持する方法がありますがTextBlock、ベストプラクティスではありません。

<Grid>
    <TextBlock x:Name="StringToImage" Visibility="Hidden" Text="{Binding Id, StringFormat=../Images/{0}.jpg}" />
    <Image Source="{Binding Text, ElementName=StringToImage}"/>
</Grid>
于 2013-03-23T00:00:04.920 に答える