2017-05-08 10 views
0

は私がCOLUMNNAMEとその値を含むリストを持っています。だからこのリストは違うかもしれません。私は時にはいくつかの列を持ち、異なる名前を持つことができることを意味します。カスタム列のGridView(MVVM)

structerは

public class LookupFields 
{ 
    public string FieldName { get; set; } 
    public string FieldDisplayName { get; set; } 

    public bool IsCandiateKey { get; set; } 
} 

であり、ここで私は、グリッド

private void InitializeGrid(ListView displayPanel, List<LookupFields> items) 
    { 
     //GridView gv = new GridView(); 

     GridLookupResult.AllowsColumnReorder = true; 

     var columns = items; 
     for (int i = 0; i < columns.Count; i++) 
     { 
      GridViewColumn col = new GridViewColumn(); 

      col.Header = new Binding ("[FieldName]"); 
      col.DisplayMemberBinding= new Binding("[FieldDisplayName]"); 


      GridLookupResult.Columns.Add(col); 
     }    
     displayPanel.View = GridLookupResult; 
     displayPanel.DataContext = items; 
     displayPanel.ItemsSource = items; 
    } 

をにアイテムをロードしていますどのように、ここでXAML側にアイテムを

<ListView x:Name="listItems" Grid.Row="1" ItemsSource="{Binding AllCustomLookupItems}" SelectedItem="{Binding SelectedItem}" GridViewColumnHeader.Click="GridViewColumnHeaderClickedHandler" > 
      <ListView.Resources> 
       <Style TargetType="{x:Type ListViewItem}"> 
        <EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" /> 
       </Style> 
      </ListView.Resources> 
      <ListView.View> 
       <!--<GridView x:Name="listItemsGrid"> 
        <GridViewColumn Header="{Binding HeaderCode}" DisplayMemberBinding="{Binding Code}" Width="150"/> 
        <GridViewColumn Header="{Binding HeaderDesc2}" DisplayMemberBinding="{Binding Desc2}" Width="150" /> 
        <GridViewColumn Header="{Binding HeaderDesc}" DisplayMemberBinding="{Binding Desc}" Width="350" /> 
       </GridView>--> 
       <GridView x:Name="GridLookupResult"> 
       </GridView>  
      </ListView.View> 
     </ListView> 

私もいっぱいAllCustomLookupItemsです。そして結果はそのような..です

enter image description here

私がミスをしたんだ

アップデート:ここでは次のように私はリストに

var list = proxy.LoadAll(); 

     foreach (var row in list) 
     { 

      CustomLookup cLookup = new CustomLookup(); 
      cLookup.Fields=new Dictionary<string, string>(); 
      foreach (var col in row.PropertyTable) 
      { 
       cLookup.Fields.Add(col.Key, col.Value); 
      }   

     } 



     AllCustomLookupItems = lookUpFields;// items.Select(s => s.Model).ToList(); 
     _candidateKey = candidateKey; 
     // AllLookupItems = items; 


    public List<LookupFields> AllCustomLookupItems 
    { 
     get { return _allCustomLookupItems; } 
     set 
     { 
      _allCustomLookupItems = value; 
     // SearchExecute(null); 
     } 
    } 

をロードし、ビューで、私はこの項目にアクセスするビューモデル側である:DataGridItemsSource性質を持っている

var customViewModel = (LookupCustomViewModel) dc; 
    var items=customViewModel.AllCustomLookupItems; 
+0

に特異的に結合することができます。ビューのDataContextをViewModelに設定することを思い出しましたか? –

+0

@KamilSolecki、あなたの答えに感謝します。 AllCustomLookupItemsにアイテムを読み込むためのコードを追加しました。私はあなたが – ertan2002

+0

うーんために尋ね、それはあなたがAllCustomLookupItemsのプロパティを持っていない意味してと思いますか?どのようにインスタンス化されているのかを表示できますか? –

答えて

0

とあなたのViewModelを表示してくださいDataViewオブジェクトItemsSource="{Binding DataView}"

+0

私はDataGridを持っていません。私はGridviewしか持っていません。私はmydataをxmlに変換することによって問題を解決しましたが、私はそのようには気に入らないのです。私が代わりにListViewコントロールの使用データグリッドを使用するのではと言うと、GridViewのオブジェクトにバインドするためにどのような意味ertan2002 @ – ertan2002

+0

。 DataTableを使用して任意のDataTableからGridViewを作成できます。 –