Исходный код:
class Cons
{
public Cons()
{
BaseDir = AppDomain.CurrentDomain.BaseDirectory;
SetProperty();
}
private void SetProperty()
{
NowPlaying = "Hello";
}
public string NowPlaying{get; set; }
}
public partial class MainWindow
{
Cons Resources = new Cons()
public MainWindow()
{
txbl.DataContext = Resources;
Resources.NowPlaying = "NoHello";
}
}
И текстовый блок <Textblock x:Name = "txbl" Text = "{Binding NowPlaying, Mode=TwoWay}"/>
Когда я установил свойство NowPlaying в конструкторе MainWindow, свойство изменилось на «NoHello», но текстовое свойство TextBlock по-прежнему Привет, даже я установил режим привязки = TwoWay
Код, который вы упомянули, работает правильно. Текстовый блок показывает новое значение «NoHello». Но если вы хотите обновить значение свойства NowPlaying после загрузки текстового блока, реализуйте INotifyPropertyChanged в своем классе Cons и поднимите PropertyChanged в установщике свойства NowPlaying.
Если я хочу изменить свойство через привязку после создания TextBlock, мне нужно использовать этот интерфейс? Я изменил свойство NowPlaying, когда произошло событие
Да. Обратитесь к msdn.microsoft.com/en-us/library/ms229614(v=vs.85).aspx, чтобы реализовать его в своем классе.
Даже я добавляю INotifyPropertyChanged Source здесь, но он все еще не работает
Он правильно работает в предоставленном вами фрагменте кода. Должна быть какая-то другая проблема с привязкой. Правильный ли DataContext для текстового блока workingResources?
@QuanVN Вы передаете переменную Nowplaying в NotifyPropertyChanged вместо строки с именем переменной. Измените эту строку на NotifyPropertyChanged ("Nowplaying") с кавычками.
Я не знаю, что ты делаешь не так. Я скопировал ваш код, и он отлично работает. Кстати, вам не нужен
binding mode = TwoWay
, потому что TextBlock нельзя изменить из графического интерфейса.