msdnでは、「指定したリストからコピーされた要素を含むObservableCollectionクラスの新しいインスタンスを初期化します。ObservableCollection <T>(リスト<T>)
しかし、私はこの動作を理解していない:
私はクラスPersonを持っています。
public class Person
{
public string Firstname { get; set; }
public string Lastname { get; set; }
public override string ToString()
{
return Firstname + " " + Lastname;
}
}
ここで人のリストを作成します。 次に、リストからコピーされた要素を含むObservableCollectionを作成します。
次に、リスト内の1人とObservableCollection内の1人を変更します。 両方の変更が両方のコレクションに反映されます。どうして?
最後に、1人をリストに追加し、1人をOCに追加します。 追加された項目
public partial class MainWindow : Window
{
private List<Person> PersonList{ get; set; }
private ObservableCollection<Person> PersonObservableCollection { get; set; }
public MainWindow()
{
InitializeComponent();
FillCollections();
listbox1.ItemsSource = PersonList;
listbox2.ItemsSource = PersonObservableCollection;
}
private void FillCollections()
{
PersonList = LoadDataPerson();
PersonObservableCollection = new ObservableCollection<Person>(PersonList);
// Adding a person to the List.
PersonList.Add(new Person() { Firstname = "added to List",});
// Adding a person to the ObservableCollection.
PersonObservableCollection.Add(new Person() { Firstname = "added to Observable Collection" });
// Changing then name of the first person in the List
Person p1 = PersonList[0];
p1.Lastname = "changed in List";
// Changing the name of the second person in the ObservableList
Person p2 = PersonObservableCollection[1];
p2.Lastname = "changed in ObservableCollection";
}
private List<Person> LoadDataPerson()
{
List<Person> personen = new List<Person>();
personen.Add(new Person() { Firstname = "John"});
personen.Add(new Person() { Firstname = "Will"});
personen.Add(new Person() { Firstname = "Sam" });
return personen;
}
}
関連コレクションにXAMLのみreflectetです:
<Window x:Class="ObservableCollection.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ObservableCollection"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<ListBox Grid.Column="0" x:Name="listbox1"/>
<ListBox Grid.Column="1" x:Name="listbox2"/>
</Grid>
出力は次のようになります。 Output
[参照型](https://msdn.microsoft.com/en-us/library/t63sy5hs.aspx)の仕組みを理解していますか?特に、参照型オブジェクトのリストは、実際にはメモリ内の別の場所にある一意に識別可能なオブジェクトの*参照*のリストであることを理解していますか? – phoog