【问题标题】:How do I add a row to my list view?如何在列表视图中添加一行?
【发布时间】:2013-05-23 21:54:00
【问题描述】:

我似乎无法让它工作。有人知道为什么吗?

这里是标记:

<ListView Width="210" Height="83" Margin="0 0 5 0" Name="FiltersListView">
                            <ListView.View>
                                <GridView>
                                    <GridViewColumn Header="Column" Width="Auto" DisplayMemberBinding="{Binding FilterColumn}"></GridViewColumn>
                                    <GridViewColumn Header="Rule" Width="Auto" DisplayMemberBinding="{Binding FilterRule}"></GridViewColumn>
                                    <GridViewColumn Header="String" Width="Auto" DisplayMemberBinding="{Binding FilterString}"></GridViewColumn>
                                </GridView>
                            </ListView.View>
                        </ListView>

这里是窗口初始化器:

public SelectionWindow()
    {
        InitializeComponent();
        rows = new List<Row>();
        // Create a new binding object and set the binding of this list view to it.
        Binding myBinding = new Binding();
        myBinding.Source = rows;
        FiltersListView.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);
    }

这是我的行对象和类:

List<Row> rows;
public class Row
    {
        public string FilterColumn;
        public string FilterRule;
        public string FilterString;
    }

但是当我点击这个按钮时,我没有看到它被添加到列表中:

private void AddButtonClick(object sender, RoutedEventArgs e)
        {
            Console.WriteLine("Adding row.");
            rows.Add(new Row { FilterColumn = "1", FilterRule = "2", FilterString = "3" });
            Console.WriteLine("Row added.");
        }

【问题讨论】:

    标签: c# wpf xaml listview binding


    【解决方案1】:

    这是因为List&lt;int&gt;没有实现INotifyCollectionChanged,所以控件不知道列表实际上已经更新了。

    尝试将rows 设为ObservableColelction&lt;Row&gt;


    编辑:正如 OP 所述,另一个问题(空行)是由于在 Row 上使用字段而不是属性。

    【讨论】:

    • 它现在部分工作。我看到添加了行,但行似乎都是空白的。任何想法为什么?
    • 还有没有办法在 ASMX 中设置所有这些?
    • @Alexandru: 不确定Width="Auto" 是否为真——你能尝试使用恒定宽度吗?
    • @Alexandru:我没有使用 ASP 的经验,很抱歉,对 asmx 一无所知。
    • 看来诀窍是在 Row 的属性上添加 getter 和 setter。现在我可以看到行了! :D public class Row { public string FilterColumn { get;放; } 公共字符串 FilterRule { 获取;放; } 公共字符串过滤器字符串 { 获取;放; } }
    猜你喜欢
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多