【问题标题】:listview add new item controllistview 添加新项目控件
【发布时间】:2016-06-14 02:39:15
【问题描述】:

我有一个列表视图,并希望使用某种控件将项目动态添加到其中。例如

假设“pack1”“pack2”是 ListViewItems,我希望拥有额外的(红色方块)控件,该控件始终可见并在点击时添加新的“pack”项目。 所以这个任务是相当标准的。一般是怎么做的?

更新 CompositeCollection 似乎是一个不错的解决方案。

【问题讨论】:

  • 到目前为止,您为 Pack1 和 Pack2 项目实施了什么?向我们展示一些代码,以便我们可以看到我们可以在哪里添加一些想法,以便您了解您要完成的工作。
  • 我添加了一些代码,但这只是一个草图。在此代码中,它的 listview 在 listview 中,但没关系。主要问题是有没有标准的方法来做到这一点?
  • 我认为这段代码只会使问题复杂化,因为listview里面有listview。即使是没有任何样式的默认列表视图也可以解决真正的问题。

标签: c# wpf


【解决方案1】:

我用列表视图做了一个非常简单的布局。我向列表视图项添加一个按钮,并在按钮之前聆听单击以插入一个新对象。

public MainWindow()
    {
        InitializeComponent();
        listViewtst.Items.Add("test");
        listViewtst.Items.Add("test2");
        Button btn = new Button();
        btn.Content = "+";
        btn.Click += Btn_Click;
        listViewtst.Items.Add(btn);
    }

    private void Btn_Click(object sender, RoutedEventArgs e)
    {
        listViewtst.Items.Insert(listViewtst.Items.Count - 1, "added by the btn");

    }

不确定这是否是最好的解决方案,但如果没有人告诉我更好的方法,我会这样做:)


其他解决方案:

后面的代码

    /// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    private ObservableCollection<MyObject> _windows = new ObservableCollection<MyObject>();

    public MainWindow()
    {
        InitializeComponent();
        Windows.Add(new MyObject { Title = "Collection Item 1" });
        Windows.Add(new MyObject { Title = "Collection Item 2" });
    }

    private void Btn_Click(object sender, RoutedEventArgs e)
    {


    }

    public ObservableCollection<MyObject> Windows
    {
        get { return _windows; }
        set { _windows = value; }
    }

    private void button_Click(object sender, RoutedEventArgs e)
    {
        Windows.Add(new MyObject { Title = "From Btn" });
    }
}

public class MyObject
{
    public string Title { get; set; }
}

Xaml:

<Window x:Class="Move_To_Prd_Dev.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="246" Width="325" Name="UI">
<Window.Resources>
    <CollectionViewSource Source="{Binding ElementName=UI, Path=Windows}" x:Key="YourMenuItems"/>
</Window.Resources>
<Grid DataContext="{Binding ElementName=UI}">
    <ListBox x:Name="listTxt" HorizontalAlignment="Left" Height="163" Margin="10,29,0,0" VerticalAlignment="Top" Width="297">
        <ListBox.ItemsSource>
            <CompositeCollection>
                <CollectionContainer Collection="{Binding Source={StaticResource YourMenuItems}}" />
                <Button x:Name="button" Content="Button" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="button_Click"/>

            </CompositeCollection>
        </ListBox.ItemsSource>
    </ListBox>

</Grid>

这使用 CompositeCollection 将按钮控件添加到列表中(优点是按钮总是最后一个)

【讨论】:

  • 我正在尝试使用 MVVM,因此我的列表视图使用 XAML 中的 ItemsSource 属性绑定到 ObservableCollection。如果有任何方法可以将您的方法与数据绑定结合起来,那将是一个理想的解决方案
  • 你可能想看看这个然后stackoverflow.com/questions/14489112/…
  • 谢谢,太好了。
猜你喜欢
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2017-11-11
相关资源
最近更新 更多