2016-03-01 131 views
2

我有一個列表視圖,並希望使用某種控件動態添加項目到它。例如 enter image description herelistview添加新項目控件

提供「PACK1」「PACK2」是ListViewItems我希望能有更多的(紅方)控制,始終可見,並增加了新的「點擊包」項目。 所以這個任務很標準。通常如何做?

UPDATE CompositeCollection似乎是一個不錯的解決方案。

+0

你有什麼工作迄今已爲PACK1和PACK2項目?向我們展示一些代碼,以便我們可以看到我們可以在哪裏添加一些想法,以便了解您要完成的任務。 – Batuta

+0

我已經添加了一些代碼,但它只是一個草圖。在這個代碼中,它的列表視圖內的列表視圖,但沒關係。主要的問題是有沒有標準的方法來做到這一點? – SkySurfer

+0

我認爲這個代碼只會使問題複雜化,因爲listview裏面有listview。真正的問題甚至可以解決到沒有任何樣式的默認列表視圖。 – SkySurfer

回答

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到按鈕控件添加到列表(其優點是按鈕總是最後)

Result

+0

我想使用MVVM,所以我的listview綁定到ObservableCollection在XAML中使用ItemsSource屬性。如果有什麼方法可以將你的方法與數據綁定結合起來,這將是一個理想的解決方案 – SkySurfer

+1

你可能想看看這個然後 http://stackoverflow.com/questions/14489112/how-do-i-dynamically-bind靜態添加菜單項 –

+1

謝謝,這很完美。 – SkySurfer