我想要实现的目标
我有一个 WPF 应用程序(仅用于测试),我想将标签的文本(内容)绑定到某处的属性。这个想法是,当用户选择不同的语言时,该属性值将会改变。当属性更改时,我希望标签文本更新为新值。
我尝试过的
我尝试创建一个具有标签值静态属性的静态类。例如:
public static class Language
{
public static string Name = "Name";
}
然后,我可以使用 XAML 将此值绑定到我的标签,如下所示:
Content="{Binding Source={x:Static lang:Language.Name}}"
这对于显示“Name”的初始值效果很好。问题是,当Name
属性更改标签值不会更改。
那么,回到绘图板(谷歌)。然后我发现这个答案 https://stackoverflow.com/a/6390863/838807这听起来正是我所需要的。这是我的新尝试:
public class Language
{
public static Language Instance { get; private set; }
static Language() { Instance = new Language(); }
private Language() { }
private string name = "Name";
public string Name { get { return name; } set { name = value; } }
}
我的绑定将其更改为:
Content="{Binding Source={x:Static lang:Language.Instance}, Path=Name}"
这仍然会导致同样的问题。
问题
我在这里缺少什么?当值更改时如何更新标签?
那根本就不是财产。尝试:
public class Language
{
public static Language Instance { get; private set; }
static Language() { Instance = new Language(); }
private Language() { Name = "Name"; }
public string Name {get;private set;}
}
或更改通知:
public class Language : INotifyPropertyChanged
{
public static Language Instance { get; private set; }
static Language() { Instance = new Language(); }
private Language() { }
private string name = "Name";
public string Name
{
get { return name; }
set { SetValue(ref name, value);}
}
protected void SetValue<T>(ref T field, T value,
[CallerMemberName]string propertyName=null)
{
if (!EqualityComparer<T>.Default.Equals(field, value))
{
field = value;
OnPropertyChanged(propertyName);
}
}
protected virtual void OnPropertyChanged(
[CallerMemberName]string propertyName=null)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
public event PropertyChangedEventHandler PropertyChanged;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)