2017-10-10 10 views
0

私はリストビューに物事を追加する方法を見つけようとしていて、その後それらを削除することができるこのプロジェクトを持っています。しかし、ハードコードしない限り、itemsourceをバインドすることはできません。 XAMLでどうすればいいですか?私はXAMLObservableCollection項目を表示するためにWPFでitemsourceを適切に設定するにはどうすればよいですか?

<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> 

EDITをYMするItemsource = {バインディングアイテム}を追加する場合でも、それを追加doesntのitemsource私はハードを削除する場合

しかし、これは、リストビュー

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; 
     } 
    } 

に項目を追加します

クラス

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}" ...> 

また、おそらく名前の変更を検討してください"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クラスもpublicでなければなりません。私の編集を参照してください。 – mm8

+0

ああ!申し訳ありませんが、それを参照してください:D –