0

私はWPFが初めてです。のList<string>ソースとして がありますListBox's ItemsSource。最初は、OKListBoxのすべてが表示されます。ただし、 myに文字列を追加しようとした後、 は変更を更新しません。私は(背後にある)データを(ビュー)にバインドするために使用しています。これが私のコードです:ItemsList<string>List<string>ListBoxBindingListBox

//Code behind
public MainWindow: Window {
   public MainWindow(){
      InitializeComponent();
      Items = new List<string>(){"1","2","3"};//after loaded, all these values are displayed OK in my ListBox.
      DataContext = this;
      //Try clicking on a button to add new value
      button1.Click += (s,e) => {
         Items.Add("4");//But my ListBox stays the same without any update/changes.
      };
   }
   public List<string> Items {get;set;}
}
//XAML
<ListBox ItemsSource={Binding Items}/>

ここで私が間違っていることを指摘して、解決策を教えてください。事前にどうもありがとうございました。

4

2 に答える 2

3

のドキュメントをItemsSource読んだことがあれば、何が問題なのかがすでにわかっているはずです。

[...]

この例では、クラスから派生したコレクションを作成してバインドする方法を示しますObservableCollection<T>。これは、アイテムが追加または削除されたときに通知を提供するコレクション クラスです。

于 2013-07-25T23:33:33.597 に答える
1

アイテムが追加、削除されたとき、またはリスト全体が更新されたときに通知を提供する動的データ コレクションを表すため、代わりに ObservableCollection を試す必要があります 。

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button Click="Button_Click" Content="Button" HorizontalAlignment="Left" Margin="441,289,0,0" VerticalAlignment="Top" Width="75"/>
        <ListBox HorizontalAlignment="Left" ItemsSource="{Binding MyList,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Name="lstbox" Height="296" Margin="21,23,0,0" VerticalAlignment="Top" Width="209"/>

    </Grid>
</Window>

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private ObservableCollection<string> _myList = new ObservableCollection<string>(new List<string>(){"1","2","3"});
        int i = 3;  

        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;  
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            MyList.Add(i++.ToString());  
        }
        public ObservableCollection<string> MyList
        {
            get { return _myList; }
            set { _myList = value; }
        }
    }
}
于 2013-07-25T23:56:36.800 に答える