2016-04-24 55 views
1

抱歉我的英文不好。我试图结合图像的列表在列表视图中的的ItemSource: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(); 
     } 
    } 

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

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 

如果我设置结合模式,以单向它的工作原理!

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

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

谢谢!

+0

请发布ListView xaml和模型类。没有这个,很难给出解决方案 – Archana

+0

@LovetoCode +1,你为什么还需要在Listview中使用TwoWay? – Stamos

回答

0

我没有使用Tempalte 10,只有一个正常的UWP应用程序来测试你的问题,我想我已经复制了你的问题。 enter image description here

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

If I set binding mode to OneWay it works!

如果您使用{X:}绑定的单向模式,您ListViewItemSource是约束性指标,以及您List<Image> Images在视图模型是绑定源。显然你的来源是一个Image控件的列表。 ItemSource的类型是System.Object,这里的绑定源是一个Image类型的List控件。默认情况下,数据项在ListView中显示为绑定到的数据对象的字符串表示形式。所以当xaml无法识别这个字符串时,它将直接使用ToString方法的实现来返回类型名称并将其显示在该项目上。总之,作为绑定目标的ItemSource已经完成了转换类型的工作。

但是当使用双向模式时,ItemSource是绑定目标,也是绑定源,所以是List<Image> Images。它适用于“ItemSource = binding target”模式,这是我解释过上层的原因,但如果“ItemSource = binding source”,它不会自动将System.Object类型转换为List类型。你也可以说,你没有提供一个转换器来将System.Object类型转换为你需要的类型。

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

+0

谢谢!只是这个错误似乎恰恰相反。错误是:您无法将类型System.Collections.Generic.List(posytron.epart.uwp.Models.DOM.Report)关联到System.Object。这不是更正确的错误你不能将类型System.Object关联到System.Collections.Generic.List(posytron.epart.uwp.Models.DOM.Report)? –