Ich habe Multibinding auf Image Control. Ich binden zwei Eigenschaften ein ist Typ von bool (IsLogged) und ein ist typeof Uri (ProfilePhoto).
XAML:
<Image.Source >
<MultiBinding Converter="{StaticResource avatarConverter}">
<Binding Path="ProfilePhoto"></Binding>
<Binding Path="StatusInfo.IsLogged"></Binding>
</MultiBinding>
</Image.Source>
</Image>
Ich erstelle einen Konverter, der BitmapImage in Graustufen umwandelt, wenn die Eigenschaft IsLogged falsch ist.
Es sieht so aus:
public class AvatarConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var image = values[0] as BitmapImage;
string s = values[1].ToString();
bool isLogged = System.Convert.ToBoolean(s);
if (!isLogged)
{
try
{
if (image != null)
{
var grayBitmapSource = new FormatConvertedBitmap();
grayBitmapSource.BeginInit();
grayBitmapSource.Source = image;
grayBitmapSource.DestinationFormat = PixelFormats.Gray32Float;
grayBitmapSource.EndInit();
return grayBitmapSource;
}
return null;
}
catch (Exception ex)
{
throw ex;
}
}
return image;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Es funktioniert gut, wenn nur ich auf Bildquelle Eigenschaft Typ fo BitmapImage binden, aber ich brauche Eigenschaft Typ von Uri binden.
Ich habe eine Angst vor der Erstellung Variable BitmapImage in Konverter und als Quelle verwenden Uri. Und diese Variable als Quelle des Bildes zurückgeben. Ich denke, dass dies nicht der ideale Weg ist. Vielleicht liege ich falsch.
Was ist Ihre Meinung
Eine elegante Lösung?