मुझे पता है कि मैं यहाँ कुछ गलत कर रहा हूं लेकिन क्या। कृपया मेरी त्रुटि देखें और देखें।INotifyPropertyChanged.Property हमेशा बदल गया NULL
मुझे अपने टेक्स्टबॉक्स में "पीटर" दिखाई देगा लेकिन बटन क्लिक के बाद "जैक" नहीं होगा।
मेरी कक्षा
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>
और मेरे codebehind
public partial class MainWindow : Window
{
Person person;
public MainWindow()
{
InitializeComponent();
person = new Person();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
person.SetName("Jack");
}
}
धन्यवाद।
दो व्यक्ति (ओं) कर रहे हैं। टेक्स्टबॉक्स ग्रिड के संसाधनों से व्यक्ति से जुड़ा हुआ है, जबकि बटन निजी क्षेत्र से व्यक्ति का नाम सेट करता है। मुझे लगता है कि आपको विंडो के डेटा कॉन्टेक्स्ट के रूप में एक व्यक्ति का उपयोग करना चाहिए। यह आपके कोड और मार्कअप को स्पष्ट करेगा। –
आप [this] (http://msdn.microsoft.com/en-us/library/ms752347.aspx) पढ़ना चाहेंगे और [यह] (http://msdn.microsoft.com/en-us/library /ms750613.aspx), क्योंकि आपको अपने बाइंडिंग और संसाधनों में कुछ भ्रम हैं। –