2017-09-12 17 views
0

私はこの問題のためのまっすぐな答えを得ることができないようです。 コードの中にアイテムソースを設定しようとしています。これはXamlで簡単に行うことができますが、コードの背後にはそれほど単純ではないようです。コードでSet ListView ItemSource Xamarinフォームのコードのバインド

は、私が使用しています後ろ:

Binding listbind = new Binding("routeLabels") {Source=this}; 

listviewofroutes.ItemsSource = SetBinding(ListView.ItemsSourceProperty, listbind); 

これをちょうど私も、これは正しくないと思う「System.Collections.IEnumerableへカント変換ボイド」のエラーがスローされます。

ビューモデルで観測可能なコレクションにバインドしようとしています。

ビューモデル:

private ObservableCollection<RouteInfo> _routelabels; 
    public ObservableCollection<RouteInfo> routeLabels 
    { 
     get { return _routelabels; } 
     set 
     { 
      if (Equals(value, _routelabels)) return; 
      _routelabels = value; 
      OnPropertyChanged(nameof(routeLabels)); 

     } 
    } 

XAMLで微この結合作品をバインディングを設定します。 問題は、私がコードの背後にあるバインディングを設定する方法がわからないという問題を観測できないコレクションです。

概要:

私は(結合itemsource)これを行う方法を知っておく必要があります:背後にあるコードで

<ListView x:Name="listviewofroutes" ItemsSource="{Binding routeLabels}"> 


</ListView> 

ご協力いただければ幸いです。

答えて

2

コントロールでプログラムでバインドを設定するには、拡張メソッドでパラメーターとして渡す必要があります。参考リンク:たとえばextension methods、またはmember method

、試してみてください。

listviewofroutes.SetBinding(ListView.ItemsSourceProperty, "routeLabels") 
//Or, 
listviewofroutes.SetBinding(ListView.ItemsSourceProperty, new Binding("routeLabels")) 

これは「routeLabels」とコントロールのBindingContextビューモデルであるとして、パス間の結合を設定します。

また、C#プロパティの標準命名ポリシーに従って 'routeLabels'を 'RouteLabels'に変更することをお勧めします。

+0

私はこれを試してみます。一瞬。 – user3355961

+0

これは機能しました。ありがとうございました – user3355961

関連する問題