1

对不起,我的英语不好。我试图在列表视图的 itemsource 中绑定图像列表:

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();
        }
    }

绑定模式设置为双向,我有以下错误:

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 就可以了!

我已经开发了一个转换器来将布尔值转换为可见性属性。

转换器应该包含什么?有人能帮我吗?为什么我有这个错误?

谢谢!!

4

1 回答 1

0

我没有使用 Tempalte 10,只是一个普通的 UWP 应用程序来测试你的问题,我想我已经重现了你的问题。 在此处输入图像描述

由于模板 10 的型号,错误消息可能略有不同,但我认为错误是相同的。

如果我将绑定模式设置为 OneWay 就可以了!

如果您使用 {x:Bind} 的 OneWay 模式,则您ListView的 'sItemSource是绑定目标,而List<Image> ImagesViewModel 中的您是绑定源。显然,您的来源是Image控件列表。的类型ItemSource是System.Object,这里的绑定源是一个List类型的Image控件。默认情况下,数据项在 ListView 中显示为其绑定的数据对象的字符串表示形式。所以当 xaml 无法识别这个字符串时,它会直接使用 ToString 方法的实现来返回类型名称并显示在项目上。总之,ItemSource作为绑定对象完成了类型转换的工作。

但是使用 TwoWay 模式时,ItemSource 是绑定目标,也是绑定源,List<Image> Images. 它在“ItemSource = binding target”模式下运行良好,原因我在上面已经解释过了,但是如果“ItemSource = binding source”,它不会自动将 System.Object 类型转换为您的 List 类型。您也可以说,您没有提供将 System.Object 类型转换为所需类型的转换器。

但我认为您不需要在这里进行双向绑定。TwoWay 绑定 在目标或源对象发生更改时更新。创建绑定时,会从源更新目标属性。从您的代码中,我看不到您可以更改项目中的图像控件以更新源列表。如果你只是想动态添加或删除或编辑ListView中的项目,你可以在这里使用OneWay模式,并在后面的代码中更改List。

于 2016-04-25T09:15:37.347 回答