問題:XAML中,想要在一個Bingding語句中再次Bingding。
Source="{Binding Path=Image,Converter={StaticResource UMatToBitmapSourceConverter},ConverterParameter={Binding IsMirror}}"
運行后會報錯XML解析異常:
解決辦法:改為使用MultiBinding的及其轉換器。
<Image.Source>
<MultiBinding Converter="{StaticResource UMatToBitmapSourceConverter}">
<Binding Path="Image"/>
<Binding Path="IsMirror"/>
</MultiBinding>
</Image.Source>
多綁定的轉換器,構造方法參數中object[] value即是多個Binding攜帶過來的值。用角標訪問這些數據,注意向下轉型的類型。
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
bool isMirror = false;
if (values[1] != null)
{
isMirror = (bool)values[1];
}
try
{
if (values[0] is UMat)
{
var image = values[0] as UMat;
return ChangeBitmapToImageSource(image.Bitmap, isMirror); // do what you want to do here!
}
else
{
return ChangeBitmapToImageSource(values[0] as System.Drawing.Bitmap);
}
}
catch
{
return DependencyProperty.UnsetValue;
}
}
重要參考: