2017-05-08 31 views
0

我有一个包含columnName及其值的列表。所以这个列表可以是不同的。我的意思是有时候我可以有几个专栏,名字也不一样。WPF中的自定义列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); 
     } 
    } 

,并在视图中我获得这个项目的观点一样,模型的一面:

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

请显示您的ViewModel。你记得将View的DataContext设置为ViewModel吗? –

+0

@KamilSolecki,谢谢你的回答。我添加了将项目加载到AllCustomLookupItems的代码。我认为它是你要求的 – ertan2002

+0

嗯,这是否意味着你没有AllCustomLookupItems的属性?你能展示它在哪里以及如何实例化? –

回答

0

DataGridItemsSource财产和你可以绑定到一个DataView对象ItemsSource="{Binding DataView}"

+0

我没有DataGrid,我只有Gridview。我通过将mydata转换为xml来解决问题,但我不喜欢这种方式。 – ertan2002

+0

@ ertan2002我的意思是说,而不是使用ListView使用DataGrid并将其绑定到GridView对象。您可以使用DataTable从任何DataTable创建一个GridView。 –