Trong XAML Tôi có dòng sau:x: image Bind với chuỗi rỗng
<Image x:Name="MainImage"
Source="{x:Bind ViewModel.MainPic,Mode=OneWay,TargetNullValue={x:Null}}"
Stretch="UniformToFill"/>
Trong ViewModel:
public string MainPic
{
get
{
if (Data == null)
return default(string);
else
return Data.Photos.ElementAtOrDefault(0).url;
}
}
App biên dịch tốt nhưng trong quá trình thực hiện (kể từ khi dữ liệu được phổ biến sau vài giây) , ứng dụng gặp sự cố với ngoại lệ sau:
System.ArgumentException: Tham số không chính xác. phá vỡ
Debugger tại địa chỉ:
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);
}
}
Rõ ràng, điều này xảy ra kể từ khi MainPic đang trở lại null.
Bây giờ, mã này hoạt động tốt trong WP8.1. Tôi đã cố gắng trả lại uri mà kết quả trong thời gian biên dịch lỗi. Tôi tin rằng chỉ có chuỗi có thể được liên kết với nguồn hình ảnh trong Win 10 (?) Tôi chỉ muốn một khu vực trắng trống cho đến khi dữ liệu được dân cư vì vậy tôi không muốn cung cấp cho một nguồn hình ảnh địa phương như dự phòng. Ai đó có thể giúp tôi cổng này cho Win 10?
UPDATE:
Nhờ những người dùng trả lời, kết luận sau đây được rút ra (ví UWP):
- Nếu bạn đang ràng buộc nguồn hình ảnh đến một
string
, nó có thể không lànull
hoặc trống""
. Một ký tự singe"x"
hoặc một không gian" "
sẽ hoạt động. - Nếu bạn liên kết với một số
BitmapImage
, hãy trả lạinull
hoạt động. - Bạn có thể sử dụng bất kỳ phương pháp nào được đề cập bởi @ Justin-xl. Đối với tôi, thay đổi tất cả các vm để ngừng trả về null là khó. Vì vậy, thêm một đơn giản chuyển đổi để xaml cũng không lừa.
Dưới đây là đoạn code Chuyển đổi:
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));
}
Mặc dù trong trường hợp cụ thể, chuỗi rỗng đang gây ra sự cố, về mặt kỹ thuật, sử dụng {x: Bind} để liên kết với chuỗi có hình ảnh hợp lệ Uris sẽ vẫn hoạt động. –
@igrali bạn biết không, tôi vừa kiểm tra nó n quyền của bạn! Thú vị mặc dù nó cần một ** ** hợp lệ url nếu không nó sẽ ném một lỗi thời gian biên dịch. Tôi sẽ cập nhật câu trả lời. –
@igrali, có vẻ như nó thậm chí không cần một uri hợp lệ, miễn là nó không có sản phẩm nào, nó sẽ không ném lỗi thời gian biên dịch! –