XAML には、次の行があります。
<Image x:Name="MainImage"
Source="{x:Bind ViewModel.MainPic,Mode=OneWay,TargetNullValue={x:Null}}"
Stretch="UniformToFill"/>
ViewModel で:
public string MainPic
{
get
{
if (Data == null)
return default(string);
else
return Data.Photos.ElementAtOrDefault(0).url;
}
}
アプリは正常にコンパイルされますが、実行中に (データが数秒後に入力されるため)、アプリは次の例外でクラッシュします。
System.ArgumentException: パラメータが正しくありません。
デバッガーは次の場所で中断します:
private void Update_ViewModel_MainPic(global::System.String obj, int phase)
{
if((phase & ((1 << 0) | NOT_PHASED | DATA_CHANGED)) != 0)
{
/*HERE>>*/ XamlBindingSetters.Set_Windows_UI_Xaml_Controls_Image_Source(this.obj23, (global::Windows.UI.Xaml.Media.ImageSource) global::Windows.UI.Xaml.Markup.XamlBindingHelper.ConvertValue(typeof(global::Windows.UI.Xaml.Media.ImageSource), obj), null);
}
}
どうやら、これは MainPic が null を返すために発生します。
現在、このコードは WP8.1 で正常に動作します。コンパイル時エラーが発生する uri を返そうとしました。Win 10 で画像ソースにバインドできるのは文字列のみだと思います (?) データが入力されるまで空白の白い領域が必要なだけなので、ローカルの画像ソースをフォールバックとして提供したくありません。誰かがこれをWin 10に移植するのを手伝ってくれますか?
アップデート:
回答したユーザーのおかげで、次の結論が導き出されました(UWPの場合):
- 画像ソースを にバインドしている場合、または を空
string
にすることはできません。単一の文字またはスペースが機能します。null
""
"x"
" "
- にバインドすると
BitmapImage
、戻り値null
が機能します。 - @Justin-xl で言及されている方法のいずれかを使用できます。私にとって、すべての vm を変更して null を返さないようにするのは困難でした。そのため、単純なコンバーターを xaml に追加することでもうまくいきます。
コンバーターのコードは次のとおりです。
public object Convert(object value, Type targetType, object parameter, string language)
{
if (string.IsNullOrEmpty(value as string))
{
return null;
}
else return new BitmapImage(new Uri(value as string, UriKind.Absolute));
}