Tono Nam
Tono Nam

Reputation: 36048

Construct listview with c#

Let's say I have the follwoing listview in xaml:

   <ListView Name="myListView" DataContext="{Binding MyProperty}" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">            
        <ListView.Resources>
            <Style TargetType="GridViewColumnHeader">
                <Setter Property="Visibility" Value="Collapsed" />
            </Style>
        </ListView.Resources>
        <ListView.View>
            <GridView >
                <GridViewColumn Width="Auto">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding SomeProperty}" TextAlignment="Center"></TextBlock>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

how can I create the same listview with C#?

this is what I have worked out:

        ListView myListView = new ListView();
        // set bindings
        myListView.IsSynchronizedWithCurrentItem = true;
        Binding b = new Binding("MyProperty")
        {
            Source = this
        };
        myListView.SetBinding(ListView.ItemsSourceProperty, b);

        myListView.Resources.Add(; // dont know how to add those resource;

        GridView g = new GridView();

        GridViewColumn gc = new GridViewColumn();

        DataTemplate dt = new DataTemplate(new TextBlock()); // I think this is wrong

        g.Columns.Add(gc); // add gridview column

        gc.CellTemplate = dt;

        myListView.View = g;

Upvotes: 1

Views: 390

Answers (1)

Serj-Tm
Serj-Tm

Reputation: 16981

Resource adding:

  view.Resources.Add(typeof(GridViewColumnHeader), 
    new Style(typeof(GridViewColumnHeader)) 
    { 
      Setters = 
      {
        new Setter(GridViewColumnHeader.VisibilityProperty, Visibility.Collapsed)
      } 
    }
  );

DataTemplate creating:

  var template = new DataTemplate();

  var textBlock = new FrameworkElementFactory(typeof(TextBlock));
  textBlock.SetBinding(TextBlock.TextProperty, new Binding("SomeProperty"));
  textBlock.SetValue(TextBlock.TextAlignmentProperty, TextAlignment.Center);

  template.VisualTree = textBlock; 

Upvotes: 2

Related Questions