2016-04-24 52 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)? –