在 Mode = TwoWay 中绑定 itemSource ListView
Binding itemSource ListView in Mode = TwoWay
抱歉我的英语不好。我试图在列表视图的项目源中绑定图像列表:
ItemsSource="{x:Bind ViewModel.Images,Mode=TwoWay}"
In ViewModel I have a list of Images :
public List<Image> Images
{
get { return _images; }
set
{
_images = value;
base.RaisePropertyChanged();
}
}
绑定模式设置为 TwoWay 时,出现以下错误:
Invalid binding path 'View Model.Reports': You can not associate the type 'System.Collections.Generic.List (posytron.epart.uwp.Models.DOM.Report)' to 'System.Object' without a converter
如果我将绑定模式设置为 OneWay 就可以了!
我已经开发了一个转换器来将布尔值转换为可见性属性。
转换器应该包含什么?有人能帮我吗?为什么我会出现这个错误?
谢谢!!
我没有使用 Tempalte 10,只是使用普通的 UWP 应用程序来测试您的问题,我想我已经重现了您的问题。
由于模板10的型号不同,错误信息可能略有不同,但我认为错误是一样的。
If I set binding mode to OneWay it works!
如果你使用{x:Bind}的OneWay模式,你的ListView
的ItemSource
是绑定目标,你的ViewModel中的List<Image> Images
是绑定源。很明显,您的来源是 Image
控件的列表。 ItemSource
的类型是System.Object,这里的绑定源是一个Image控件类型的List。默认情况下,数据项在 ListView 中显示为其绑定到的数据对象的字符串表示形式。所以当xaml无法识别这个字符串时,它会直接使用ToString方法的实现来return类型名称并显示在项目上。总之,ItemSource
作为绑定目标完成了类型转换的工作。
但是使用TwoWay模式时,ItemSource既是绑定目标也是绑定源,List<Image> Images
也是。它在模式 "ItemSource = binding target" 中运行良好,原因我已经在上面解释过,但是如果 "ItemSource = binding source",它不会自动将 System.Object 类型转换为您的列表类型。你也可以说,你没有提供转换器到转换器 System.Object 类型到你需要的类型。
但我认为您在这里不需要 TwoWay 绑定。 TwoWay binding 在目标或源对象发生变化时更新其中之一。创建绑定后,目标 属性 从源更新。从您的代码中,我看不到您可以更改项目中的图像控件来更新源列表。如果你只是想动态添加或删除或编辑ListView中的项目,你可以在这里使用OneWay模式并在后面的代码中更改List。
抱歉我的英语不好。我试图在列表视图的项目源中绑定图像列表:
ItemsSource="{x:Bind ViewModel.Images,Mode=TwoWay}"
In ViewModel I have a list of Images :
public List<Image> Images
{
get { return _images; }
set
{
_images = value;
base.RaisePropertyChanged();
}
}
绑定模式设置为 TwoWay 时,出现以下错误:
Invalid binding path 'View Model.Reports': You can not associate the type 'System.Collections.Generic.List (posytron.epart.uwp.Models.DOM.Report)' to 'System.Object' without a converter
如果我将绑定模式设置为 OneWay 就可以了!
我已经开发了一个转换器来将布尔值转换为可见性属性。
转换器应该包含什么?有人能帮我吗?为什么我会出现这个错误?
谢谢!!
我没有使用 Tempalte 10,只是使用普通的 UWP 应用程序来测试您的问题,我想我已经重现了您的问题。
由于模板10的型号不同,错误信息可能略有不同,但我认为错误是一样的。
If I set binding mode to OneWay it works!
如果你使用{x:Bind}的OneWay模式,你的ListView
的ItemSource
是绑定目标,你的ViewModel中的List<Image> Images
是绑定源。很明显,您的来源是 Image
控件的列表。 ItemSource
的类型是System.Object,这里的绑定源是一个Image控件类型的List。默认情况下,数据项在 ListView 中显示为其绑定到的数据对象的字符串表示形式。所以当xaml无法识别这个字符串时,它会直接使用ToString方法的实现来return类型名称并显示在项目上。总之,ItemSource
作为绑定目标完成了类型转换的工作。
但是使用TwoWay模式时,ItemSource既是绑定目标也是绑定源,List<Image> Images
也是。它在模式 "ItemSource = binding target" 中运行良好,原因我已经在上面解释过,但是如果 "ItemSource = binding source",它不会自动将 System.Object 类型转换为您的列表类型。你也可以说,你没有提供转换器到转换器 System.Object 类型到你需要的类型。
但我认为您在这里不需要 TwoWay 绑定。 TwoWay binding 在目标或源对象发生变化时更新其中之一。创建绑定后,目标 属性 从源更新。从您的代码中,我看不到您可以更改项目中的图像控件来更新源列表。如果你只是想动态添加或删除或编辑ListView中的项目,你可以在这里使用OneWay模式并在后面的代码中更改List。