バックグラウンドで何が起こっているのかよくわからないので、手伝ってください。私は単純なListViewを持っています:
<ListView Height="100" HorizontalAlignment="Left" Margin="67,84,0,0" ItemsSource="
{Binding Path=ListBinding}" Name="listView1" VerticalAlignment="Top" Width="351" />
とボタン:
<Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="162,41,0,0"
Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
そして、datacontextを「viewmodel」クラスに設定します。
InitializeComponent();
this.DataContext = new VM1();
ここで、VM1のコンストラクターでobscollectionを初期化すると、listBindingにbutton1_click関数を設定すると、バインディングが機能します。
private void button1_Click(object sender, RoutedEventArgs e)
{
(this.DataContext as VM1).Do();
}
public VM1()
{
ListBinding = new ObservableCollection<string>();
}
public void Do()
{
ListBinding.Add("VM1 works 1");
ListBinding.Add("VM1 works 2");
}
しかし、Do()関数で初期化すると、次のようにはなりません。
public VM1()
{ }
public void Do()
{
ListBinding = new ObservableCollection<string>();
ListBinding.Add("VM1 NOT works 1");
ListBinding.Add("VM1 NOT works 2");
}
これに対する答えはワンライナーかもしれないと思います、そして私は「なぜ」を理解したいと思います。ありがとう!