UWP の x:Bind で ImageSource を指定すると null や string.Empty のときにエラーが発生する

UWP の x:Bind で ImageSource を指定すると
null や string.Empty が入った場合に実行時エラーとなります。
エラー処理を入れるか、 Binding だと起きないのでここだけ Binding を使いましょう。
Converter を挟んで BitmapImage を返すようにしてもいいかもしれません。

コード

C#

class MainPageViewModel
{
    public string Url { get; } = "Assets/LockScreenLogo.png";
    public string NullUrl { get; } = null;
    public string EmptyUrl { get; } = string.Empty;
}

XAML

コメントアウトしている箇所を有効にするとエラーになります。

<StackPanel>
    <Image Source="{Binding Url}" Width="100" Height="100"/>
    <Image Source="{x:Bind ViewModel.Url}" Width="100" Height="100"/>
    <Image Source="{Binding NullUrl}" Width="100" Height="100"/>
    <!--<Image Source="{x:Bind ViewModel.NullUrl}" Width="100" Height="100"/>-->
    <Image Source="{Binding EmptyUrl}" Width="100" Height="100"/>
    <!--<Image Source="{x:Bind ViewModel.EmptyUrl}" Width="100" Height="100"/>-->
</StackPanel>

null の場合

private void Update_ViewModel_NullUrl(global::System.String obj, int phase)
{
    if((phase & ((1 << 0) | NOT_PHASED )) != 0)
    {
        XamlBindingSetters.Set_Windows_UI_Xaml_Controls_Image_Source(this.obj4, (global::Windows.UI.Xaml.Media.ImageSource) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.Media.ImageSource), obj), null);
    }
}
例外がスローされました: 'System.ArgumentException' (App1.exe の中)
WinRT 情報:value
型 'System.ArgumentException' の例外が App1.exe で発生しましたが、ユーザー コード内ではハンドルされませんでした
WinRT 情報:value
追加情報:パラメーターが間違っています。

value

string.Empty の場合

private void Update_ViewModel_EmptyUrl(global::System.String obj, int phase)
{
    if((phase & ((1 << 0) | NOT_PHASED )) != 0)
    {
        XamlBindingSetters.Set_Windows_UI_Xaml_Controls_Image_Source(this.obj4, (global::Windows.UI.Xaml.Media.ImageSource) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.Media.ImageSource), obj), null);
    }
}
Error: Converter failed to convert value of type 'Windows.Foundation.String' to type 'ImageSource'; BindingExpression: Path='EmptyUrl' DataItem='App1.MainPageViewModel'; target element is 'Windows.UI.Xaml.Controls.Image' (Name='null'); target property is 'Source' (type 'ImageSource'). 
例外がスローされました: 'System.ArgumentException' (App1.exe の中)
WinRT 情報:値を型 ImageSource に変換できません
型 'System.ArgumentException' の例外が App1.exe で発生しましたが、ユーザー コード内ではハンドルされませんでした
WinRT 情報:値を型 ImageSource に変換できません
追加情報:パラメーターが間違っています。

値を型 ImageSource に変換できません

関連

UWPのImageのSourceにnullや空文字をx:Bindしたときの対処方法(対処できない) – かずきのBlog@hatena
TypeConverterのないUWP界に突如現れた彗星のようだ – tmytのらくがき


カテゴリー: UWP タグ: , , , パーマリンク