简体   繁体   中英

Custom Column GridView in WPF (mvvm)

I have a list that contains columnName and its value. So this list can be different. I mean sometimes I could have several columns and have different names.

The structer is

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

    public bool IsCandiateKey { get; set; }
}

and here is how i am loading items into grid

    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;
    }

and here is the XAML side

 <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>

I also filled AllCustomLookupItems with items. And result is like that..

在此处输入图片说明

Where did I do a mistake?

Update: Here is the view model side that I load the list

 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);
        }
    }

and in the view I access this item like:

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM