私はここで何か間違ったことをしているが、何を知っている。見て、私のエラーを指摘してください。INotifyPropertyChanged.PropertyChanged常にNULL
テキストボックスに "Peter"が表示されますが、ボタンをクリックすると "Jack"は表示されません。
私のクラス
namespace App
{
class Person : INotifyPropertyChanged
{
private string name;
public String Name
{
get { return name; }
set { name = value; OnPropertyChanged("Name"); }
}
public Person()
{
Name = "Peter";
}
public void SetName(string newname)
{
Name = newname;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
}
}
私のXAML
<Window x:Class="test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:App"
Title="MainWindow" Height="400" Width="400">
<Grid>
<Grid.Resources>
<app:Person x:Key="person"/>
</Grid.Resources>
<TextBox Width="100" Height="26" Text="{Binding Source={StaticResource person}, Path=Name, Mode=TwoWay}" />
<Button Content="Button" Height="23" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
そして、私の分離コード
public partial class MainWindow : Window
{
Person person;
public MainWindow()
{
InitializeComponent();
person = new Person();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
person.SetName("Jack");
}
}
ありがとうございます。あなたはXAML
内に結合しているメインウィンドウの分離コードで人をオブジェクト
が2人(複数可)があります。 TextBoxはGridのリソースからPersonにバインドされ、ButtonはPersonの名前をprivateフィールドから設定します。私はあなたがウィンドウのDataContextとしてPersonを使うべきだと思います。これにより、コードとマークアップが明確になります。 –
[this](http://msdn.microsoft.com/en-us/library/ms752347.aspx)と[this](http://msdn.microsoft.com/en-us/library)を参照してください。 /ms750613.aspx)、バインディングとリソースにいくつかの混乱があります。 –