【问题标题】:Custom Column GridView in WPF (mvvm)WPF 中的自定义列 GridView (mvvm)
【发布时间】:2017-05-08 07:36:38
【问题描述】:

我有一个包含 columnName 及其值的列表。所以这个列表可能会有所不同。我的意思是有时我可以有几个列并且有不同的名称。

结构体是

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。结果就是这样..

我哪里做错了?

更新:这是我加载列表的视图模型端

 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;

【问题讨论】:

  • 请出示您的 ViewModel。记得把 View 的 DataContext 设置为 ViewModel 吗?
  • @KamilSolecki,谢谢你的回答。我添加了将项目加载到 AllCustomLookupItems 的代码。我想这是你要求的
  • 嗯,这是否意味着您没有 AllCustomLookupItems 的属性?你能说明它是在哪里以及如何实例化的吗?
  • @KamilSolecki,我还添加了 AllCustomLookupItems 属性。
  • 将您的标题设置为col.Header = columns[i].FieldName

标签: c# wpf gridview mvvm


【解决方案1】:

DataGrid 有一个ItemsSource 属性,您可以绑定到DataView 对象ItemsSource="{Binding DataView}"

【讨论】:

  • 我没有DataGrid,我只有Gridview。我通过将 mydata 转换为 xml 解决了这个问题,但我不喜欢这种方式。
  • @ertan2002 我的意思不是使用 ListView 而是使用 DataGrid 并将其绑定到 GridView 对象。您可以使用 DataTable 从任何 DataTable 创建 GridView。
猜你喜欢
  • 2010-12-25
  • 2012-11-03
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多