私のコード変更した場合:後ろデータバインディング、リフレッシュデータのDataContextは
public class Customer
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
コード: XAML:
<Window x:Class="BindingTut.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>
<StackPanel>
<TextBox Text="{Binding FirstName}"/>
<Button Content="Button" Height="23" Name="button1" Width="75" Click="button1_Click" />
</StackPanel>
</Grid>
</Window>
Customerクラスを
public partial class MainWindow : Window, INotifyPropertyChanged
{
private int index = 0;
public Customer Tmp;
List<Customer> ar = new List<Customer>();
public MainWindow()
{
InitializeComponent();
ar.Add(new Customer { FirstName = "qwe", LastName = "rty" });
ar.Add(new Customer { FirstName = "asd", LastName = "asd" });
this.Tmp = ar[index];
this.DataContext = this.Tmp;
}
private void button1_Click(object sender, RoutedEventArgs e)
{
this.Tmp = ar[++index];
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs("Tmp"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
だから、すべてがあるアプリケーションのロード、ファインテキストボックスには "qwe"と表示されますが、2番目の顧客オブジェクトを読み込むボタンは機能しません。私は間違って何をしていますか?
はい、それは動作します..しかし、何のINotifyPropertyChangedですか? Tmpはプロパティで、私はそれを変更するので、UIを更新する必要がありますか? –
@bah - いいえ、あなたが持っているものはTmpに "バインド"されていないので、それを変更してもUIには影響しません。 DataContextをTmp(これは 'qwe')と同じ参照に設定する' this.DataContext = this.Tmp'をいつ行うのですか?したがって、Tmpを変更してもDataContextには影響しません。 – CodeNaked
ああ、これは今のところできます。私にはたくさんのことが学べるようです。 –