C# 绑定到单例的TextBlock数据未在WPF中更新
我为这个新手问题道歉,但我正在努力解决这个问题。我定义了以下文本块:C# 绑定到单例的TextBlock数据未在WPF中更新,c#,wpf,C#,Wpf,我为这个新手问题道歉,但我正在努力解决这个问题。我定义了以下文本块: <TextBlock Text="{Binding Source={x:Static local:DeviceManager.Instance}, Path=Player.CurrentArtist}"></TextBlock> 用户界面如何知道何时更改播放器属性?从这段代码来看,它看起来并没有向我提出PropertyChanged。你能发布这个问题的完整工作示例吗?否则我们只能猜测。问题是,WPF
<TextBlock Text="{Binding Source={x:Static local:DeviceManager.Instance},
Path=Player.CurrentArtist}"></TextBlock>
用户界面如何知道何时更改播放器属性?从这段代码来看,它看起来并没有向我提出PropertyChanged。你能发布这个问题的完整工作示例吗?否则我们只能猜测。问题是,WPF从未被通知
CurrentArtister
属性的值发生更改。您可以为CurrentArtister
属性实现一个私有setter,它将触发PropertyChanged
事件,或者为MediaPlayer.Play()中的CurrentArtister
属性触发PropertyChanged
事件。
WPF仅在传入名称时响应PropertyChanged(即,现在的“Player:Song”)与您绑定的属性相同-将PropertyChanged更改为“CurrentArtister”,您将看到它正确更新。您没有引发PropertyChanged事件,您需要的是:
public sealed class DeviceManager : INotifyPropertyChanged
{
// Singleton members omitted
public IPlayer Player
{
get { return player; }
set
{
this.player = value;
OnPropertyChanged(this, new PropertyChangedEventArgs("Player"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(sender, e);
}
}
#endregion
}
public sealed class DeviceManager : INotifyPropertyChanged
{
// Singleton members omitted
public IPlayer Player
{
get { return player; }
set
{
this.player = value;
OnPropertyChanged(this, new PropertyChangedEventArgs("Player"));
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(object sender, PropertyChangedEventArgs e)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(sender, e);
}
}
#endregion
}