gpt4 book ai didi

c# - DataBinding 到单例属性的属性

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:53 24 4
gpt4 key购买 nike

我希望我的 xaml 中的文本字段绑定(bind)到属性 PlayerData.Instance.data.MyXP 类结构是这样的

class PlayerData
{
public static PlayerData Instance = new PlayerData();

public UserData data {get;set;}
}

class UserData
{
public int MyXP {get;set;}
}

有人可以解释一下我如何(如果有的话)做到这一点。我已经尝试了关于 SO 的问题的多种方法,但没有发现任何成功的方法。我遇到的最大问题是 PlayerData.Instance.data 是在创建 UI 之后分配的,所以我可能需要在 UserData 上有某种通知事件,但在 MyXP 上也需要某种通知事件,因为我希望在 xp 更改时更新 UI。

最佳答案

通常,当您使用单例时,使用它的每个对象都会获得一个实例属性的副本。您可以在包含该引用的 View Model 对象上创建一个属性,然后您将绑定(bind)到该属性。例如:

public class MyViewModel : ViewModelBase {

public PlayerData PlayerData {
get { return iPlayerData; }
set {
iPlayerData = value;
OnPropertyChanged( "PlayerData" );
}
}
private PlayerData iPlayerData;

// Other properties & code
}

然后,在您的 XAML 中,假设您已经将 Window 对象的 DataContext 属性绑定(bind)到 View Model 对象,您将使用如下内容:

<TextBlock Text="{Binding Path=PlayerData.data.MyXP}" />

您可能还需要指定一个实现 IValueConverter 接口(interface)的对象,以正确格式化 int MyXP 属性。

(请注意,如果您有一个多线程环境,您的代码(如图所示)不是单例模式的有效实现。请参阅 this article 并查看标题“IVth way of implementing Singleton Pattern in C#:多线程单例模式”(如果您的代码是多线程的)。

关于c# - DataBinding 到单例属性的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21912636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com