2017-10-10 30 views
0

我有这个项目,我想弄清楚如何添加到列表视图,然后能够删除它们。但我似乎不能得到itemsource绑定,除非我硬编码。我如何在XAML中执行此操作?如何在WPF中正确设置我的itemsource以显示我的ObservableCollection项目?

这增加了一个项目列表视图

public partial class MainWindow : Window 
    { 
     private ObservableCollection<myItem> Item; 
     const string pattern = @"((.*)) (.*) left the game"; 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void btnAppend_Click(object sender, RoutedEventArgs e) 
     { 
      Item = new ObservableCollection<myItem>() { new myItem() { Username = "Prabhat" } }; 
      lvUsers.ItemsSource = Item; 
     } 
    } 

但是,如果删除了硬编码的ItemSource它不添加它,即使我想补充的ItemSource = {结合产品}到YM XAML

<Grid> 
     <ListView Name="lvUsers" ItemsSource="{Binding Item}" HorizontalAlignment="Left" Height="107" Margin="10,10,0,0" VerticalAlignment="Top" Width="497"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="Name" Width="100" DisplayMemberBinding="{Binding Username}"/> 
       </GridView> 
      </ListView.View> 
     </ListView> 
     <TextBox Name="tbConent" HorizontalAlignment="Left" Height="78" Margin="10,122,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="497"/> 
     <Button Name="btnAppend" Click="btnAppend_Click" Content="Append" HorizontalAlignment="Left" Margin="213,220,0,0" VerticalAlignment="Top" Width="75"/> 

    </Grid> 

编辑

public class myItem 
    { 
     public string Username { get; set; } 
    } 

EDIT 2

MainWindow.xaml.cs

using System.Collections.ObjectModel; 
using System.Windows; 

namespace Listviewssssssssssssss 
{ 
    public partial class MainWindow : Window 
    { 
     public ObservableCollection<myItem> Item { get; private set; } 

     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void btnAppend_Click(object sender, RoutedEventArgs e) 
     { 
      Item = new ObservableCollection<myItem>() { new myItem() { Username = "Prabhat" } }; 
      lvUsers.Items.Refresh(); 
     } 

     private void btnRemove_Click(object sender, RoutedEventArgs e) 
     { 

     } 
    } 
} 
+0

可能的复制[C#从列表中填充列表视图](https://stackoverflow.com/questions/45584249/c-sharp-populating-a-listview-from-a-list) – ASh

+0

[MVVM](https://msdn.microsoft .com/en-us/library/hh848246.aspx)在使用WPF,特别是XAML Bindi ngs –

回答

3

Item的公共属性:

public ObservableCollection<myItem> Item { get; private set; } 

而且可以绑定到它:

<ListView Name="lvUsers" ItemsSource="{Binding Item, RelativeSource={RelativeSource AncestorType=Window}}" ...> 

制作确定myItem是一种公共类型:

public class myItem { ... } 

或者你可以设置窗口的DataContext本身:

public partial class MainWindow : Window 
{ 
    public ObservableCollection<myItem> Item { get; private set; } 
    const string pattern = @"((.*)) (.*) left the game"; 

    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
     Item = new ObservableCollection<myItem>() { new myItem() { Username = "Prabhat" } }; 
    } 
} 

...并绑定到源集合直接:

<ListView Name="lvUsers" ItemsSource="{Binding Item}" ...> 

你也应该考虑可能重命名该物业为“物品s”,因为它是一个集合。

编辑:

编辑:如果你打算以后初始绑定动态设置Item属性,还需要实现INotifyPropertyChanged接口,提高变更通知:的

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    private ObservableCollection<myItem> _items; 
    public ObservableCollection<myItem> Item 
    { 
     get { return _items; } 
     set { _items = value; NotifyPropertyChanged(); } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void btnAppend_Click(object sender, RoutedEventArgs e) 
    { 
     Item = new ObservableCollection<myItem>() { new myItem() { Username = "Prabhat" } }; 
    } 

    private void btnRemove_Click(object sender, RoutedEventArgs e) 
    { 

    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] String propertyName = "") 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 
+0

更改modofer给了我这种不一致的可访问性:字段类型'ObservableCollection '比字段'MainWindow.Item' –

+0

更不易访问myItem类也必须是公共的。看我的编辑。 – mm8

+0

啊废话!对不起,没有看到,谢谢:D –

相关问题