如何以编程方式绑定到静态属性?我可以在C#中使用什么来制作
{Binding Source={x:Static local:MyClass.StaticProperty}}
更新:是否可以进行OneWayToSource绑定?我知道TwoWay是不可能的,因为静态对象上没有更新事件(至少在.NET 4中)。我无法实例化对象,因为它是静态的。
答案 0 :(得分:8)
OneWay绑定
我们假设您的班级Country
具有静态属性Name
。
public class Country
{
public static string Name { get; set; }
}
现在您希望将Name
绑定到TextProperty
的{{1}}。
TextBlock
更新:双向绑定
Binding binding = new Binding();
binding.Source = Country.Name;
this.tbCountry.SetBinding(TextBlock.TextProperty, binding);
课程如下所示:
Country
现在我们想要将此属性public static class Country
{
private static string _name;
public static string Name
{
get { return _name; }
set
{
_name = value;
Console.WriteLine(value); /* test */
}
}
}
绑定到Name
,所以:
TextBox
如果您想要更新目标,则必须使用Binding binding = new Binding();
binding.Source = typeof(Country);
binding.Path = new PropertyPath(typeof(Country).GetProperty("Name"));
binding.Mode = BindingMode.TwoWay;
binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
this.tbCountry.SetBinding(TextBox.TextProperty, binding);
并运行BindingExpression
:
UpdateTarget
答案 1 :(得分:0)
您总是可以编写一个非静态类来提供对静态类的访问。
静态类:
namespace SO.Weston.WpfStaticPropertyBinding
{
public static class TheStaticClass
{
public static string TheStaticProperty { get; set; }
}
}
非静态类,提供对静态属性的访问。
namespace SO.Weston.WpfStaticPropertyBinding
{
public sealed class StaticAccessClass
{
public string TheStaticProperty
{
get { return TheStaticClass.TheStaticProperty; }
}
}
}
绑定很简单:
<Window x:Class="SO.Weston.WpfStaticPropertyBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SO.Weston.WpfStaticPropertyBinding"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<local:StaticAccessClass x:Key="StaticAccessClassRes"/>
</Window.Resources>
<Grid>
<TextBlock Text="{Binding Path=TheStaticProperty, Source={StaticResource ResourceKey=StaticAccessClassRes}}" />
</Grid>
</Window>