大家。
有没有人知道如何将全局静态字符串绑定到UWP Textblock,并且控制中的属性更改更新?
我尝试了很多东西,例如:
Text="{Binding Path={local:AppSettings.StorageFolder}, Mode=OneWay}"
Text="{x:Bind Path=(local:AppSettings.StorageFolder), RelativeSource={RelativeSource Self}, Mode=OneWay}"
没有效果。总是出现一些错误,例如: "不支持嵌套类型 价值不在预期范围内"
我设法将它绑定到我班级的非静态值:
Text="{x:Bind viewModel.MyValue, Mode=OneWay}"
对此有任何解决方案吗?
感谢名单。
答案 0 :(得分:1)
您无法以与WPF中相同的方式绑定到UWP中的静态属性。没有x:静态标记扩展可用。
你有一些选择:
如果元素的DataContext是定义静态属性的类型的实例,则可以照常绑定到静态属性:
<TextBlock Text="{Binding MyStaticProperty}" />
public sealed partial class BlankPage1 : Page
{
public BlankPage1()
{
this.InitializeComponent();
this.DataContext = this;
}
public static string MyStaticProperty { get { return "Static..."; } }
}
如果静态属性是在另一个类中定义的,那么最好的选择是将静态属性包装在非静态属性中:
public sealed partial class BlankPage1 : Page
{
public BlankPage1()
{
this.InitializeComponent();
this.DataContext = this;
}
public static string MyWrapperProperty { get { return MyStaticClass.MyStaticProperty; } }
}
public static class MyStaticClass
{
public static string MyStaticProperty { get { return "Static..."; } }
}
如果您想要属性更改通知,那么根本无法绑定到静态属性是没有意义的,因为属性的源对象必须实现INotifyPropertyChanged接口才能刷新目标属性通过引发PropertyChanged事件动态地生成。
您仍然可以将静态属性包装在实现INotifyPropertyChanged接口的视图模型的非静态属性中:
public class ViewModel : INotifyPropertyChanged
{
public string MyNonStaticProperty
{
get { return MyStaticClass.MyStaticProperty; }
set { MyStaticClass.MyStaticProperty = value; NotifyPropertyChanged(); }
}
//...
}
public static class MyStaticClass
{
public static string MyStaticProperty { get; set; }
}
每当您想要在视图中刷新目标属性时,您将非常需要从视图模型类调用NotifyPropertyChanged(“MyNonStaticProperty”)。
答案 1 :(得分:0)
当前在UWP中使用x:Bind时,end属性(即路径的末尾)必须是可变的/非静态的。但是,您可以在此之前引用静态属性,例如x:Bind local:MyClass.Singleton.NonstaticProperty。
在x:Bind属性路径的末尾使用函数也可以解决这种挑战。