可编辑ListView wpf

时间:2018-03-19 14:51:16

标签: c# .net wpf listview

我正在尝试动态创建可编辑的列表视图。需要显示字符串数组作为源。当我们点击该项目时,它应该是可编辑的。

问题:没有错误但没有显示任何项目。

 Style tableStyle = _resourceDictionary["TableStyle"] as Style;

        ItemsPanelTemplate itemsPanelTemplate = _resourceDictionary["ItemsPanelTemplate"] as ItemsPanelTemplate;

        FrameworkElementFactory factoryPanel = new FrameworkElementFactory(typeof(UniformGrid));
        factoryPanel.SetValue(UniformGrid.ColumnsProperty, 5);
        ItemsPanelTemplate template = new ItemsPanelTemplate();
        template.VisualTree = factoryPanel;

        ListView simpleTable = new ListView();
        //  simpleTable.Columns.Add(new DataGridTextColumn { Header = "Values" });
        simpleTable.Style = tableStyle;
        simpleTable.ItemsPanel = template;
        _table = simpleTable;

 string aa = "aa,xx,cc,vv,bbb,hh,gg,rr,tt,yy,uu,ooo";
_table.ItemsSource = aa.ToString().Split(',');

的Xaml

<Style x:Key="TableStyle" TargetType="{x:Type ListView}">
    <Setter Property="Background" Value="{StaticResource ControlBackgroundBrush}"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListView}">
                <ListView>
                    <ListView.View>
                        <GridView >
                            <GridViewColumn Header="Databases" Width="498">
                                <GridViewColumn.CellTemplate>
                                    <DataTemplate>
                                        <TextBox  Text="{Binding .}" />
                                    </DataTemplate>
                                </GridViewColumn.CellTemplate>
                            </GridViewColumn>
                        </GridView>
                    </ListView.View>
                </ListView>

            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

3 个答案:

答案 0 :(得分:1)

如果您希望能够在表格网格中编辑数据,则应使用DataGrid控件。它基本上是一个可编辑的GridView

创建一个代表行的类:

public class Item
{
    public string Value { get; set; }
}

并将ItemsSource的{​​{1}}属性设置为此类对象的集合:

DataGrid

<强> XAML:

string aa = "aa,xx,cc,vv,bbb,hh,gg,rr,tt,yy,uu,ooo";
_table.ItemsSource = aa.Split(',').Select(x => new Item() { Value = x });

答案 1 :(得分:0)

我认为你使用的数据类型是错误的 如果您希望列表可以具有编辑功能,则应使用此情况下的observableCollection

答案 2 :(得分:0)

您正在第一个ListView内创建另一个ControlTemplate,这就是造成混淆的原因:

  <ListView ItemsSource="{Binding EditableItems}" >
        <ListView.View>
            <GridView >
                <GridViewColumn Header="Databases" Width="498">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBox  Text="{Binding .}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>