2016-03-01 2 views
2

У меня есть listview и хочу динамически добавлять элементы в него с помощью какого-то элемента управления. Например,listview добавить новый элемент управления

При условии, что «pack1» «pack2» - это ListViewItems. Я хочу иметь дополнительный (красный квадрат) элемент управления, который всегда отображается и добавляет новый элемент «пакет» при щелчке. Итак, задача довольно стандартная. Как это обычно делается?

UPDATE CompositeCollection, кажется хорошим решением.

+0

Что вы реализованным до сих пор для Pack1 и Pack2 Предметы? Покажите нам некоторые коды, чтобы мы могли видеть, где мы могли бы добавить некоторые идеи, чтобы вы могли понять, чего вы пытаетесь достичь. – Batuta

+0

Я добавил код, но это просто эскиз. В этом коде его listview внутри listview, но это не имеет значения. Главный касторий - есть ли стандартный способ сделать это? – 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 с использованием свойства ItemsSource в XAML. Если бы какой-либо способ сочетать вас с привязкой данных, которая была бы идеальным решением – SkySurfer

+1

, вы можете посмотреть это затем http://stackoverflow.com/questions/14489112/how-do-i-dynamically-bind -and-static-add-menuitems –

+1

Спасибо, это прекрасно. – SkySurfer

Смежные вопросы