可编辑的ListView wpf

问题描述 投票:0回答:3

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

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

 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>
c# .net wpf listview
3个回答
1
投票

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

创建一个表示行的类:

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

并将ItemsSourceDataGrid属性设置为此类对象的集合:

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

XAML:

<DataGrid x:Name="_table" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Databases" Binding="{Binding Value}" />
    </DataGrid.Columns>
</DataGrid>

0
投票

我认为你使用的数据类型是错误的如果你想你的列表可以有一个编辑功能你应该在这种情况下使用observableCollection


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>
© www.soinside.com 2019 - 2024. All rights reserved.