首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >绑定到静态属性

绑定到静态属性
EN

Stack Overflow用户
提问于 2009-06-02 03:20:49
回答 12查看 185.9K关注 0票数 186

我很难将一个简单的静态字符串属性绑定到一个TextBox。

下面是具有静态属性的类:

代码语言:javascript
复制
public class VersionManager
{
    private static string filterString;

    public static string FilterString
    {
        get { return filterString; }
        set { filterString = value; }
    }
}

在我的xaml中,我只想将这个静态属性绑定到一个TextBox:

代码语言:javascript
复制
<TextBox>
    <TextBox.Text>
        <Binding Source="{x:Static local:VersionManager.FilterString}"/>
    </TextBox.Text>
</TextBox>

一切都会编译,但在运行时,我会得到以下异常:

无法将属性'Source‘中的值转换为类型为'System.Windows.Markup.StaticExtension’的对象。标记文件'BurnDisk;component/selectversionpagefunction.xaml‘第57行位置29中的对象'System.Windows.Data.Binding’出错。

知道我做错了什么吗?

EN

回答 12

Stack Overflow用户

回答已采纳

发布于 2009-06-02 09:25:53

如果绑定需要是双向的,则必须提供路径。

在静态属性上进行双向绑定有一个诀窍,只要类不是静态的:在资源中声明类的一个虚拟实例,并将其用作绑定的源。

代码语言:javascript
复制
<Window.Resources>
    <local:VersionManager x:Key="versionManager"/>
</Window.Resources>
...

<TextBox Text="{Binding Source={StaticResource versionManager}, Path=FilterString}"/>
票数 188
EN

Stack Overflow用户

发布于 2009-06-01 19:25:07

你不能绑定到像那样的静电。由于不涉及DependencyObject (或实现INotifyPropertyChanged的对象实例),因此绑定基础结构无法获得更新通知。

如果该值没有更改,只需丢弃绑定,直接在Text属性中使用x:Static即可。将下面的app定义为VersionManager类的命名空间(和程序集)位置。

代码语言:javascript
复制
<TextBox Text="{x:Static app:VersionManager.FilterString}" />

如果值确实改变了,我建议创建一个单例来包含该值并绑定到该值。

单例的一个例子:

代码语言:javascript
复制
public class VersionManager : DependencyObject {
    public static readonly DependencyProperty FilterStringProperty =
        DependencyProperty.Register( "FilterString", typeof( string ),
        typeof( VersionManager ), new UIPropertyMetadata( "no version!" ) );
    public string FilterString {
        get { return (string) GetValue( FilterStringProperty ); }
        set { SetValue( FilterStringProperty, value ); }
    }

    public static VersionManager Instance { get; private set; }

    static VersionManager() {
        Instance = new VersionManager();
    }
}
代码语言:javascript
复制
<TextBox Text="{Binding Source={x:Static local:VersionManager.Instance},
                        Path=FilterString}"/>
票数 125
EN

Stack Overflow用户

发布于 2011-09-22 21:54:59

在.NET 4.5中,可以绑定到静态属性、read more

您可以将静态属性用作数据绑定的源。如果引发静态事件,数据绑定引擎会识别属性值何时发生更改。例如,如果类SomeClass定义了一个名为MyProperty的静态属性,则SomeClass可以定义一个在MyProperty的值更改时引发的静态事件。静态事件可以使用以下签名之一:

代码语言:javascript
复制
public static event EventHandler MyPropertyChanged; 
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged; 

请注意,在第一种情况下,该类公开了一个名为PropertyNameChanged的静态事件,该事件将EventArgs传递给事件处理程序。在第二种情况下,该类公开一个名为StaticPropertyChanged的静态事件,该事件将PropertyChangedEventArgs传递给事件处理程序。实现静态属性的类可以选择使用这两种方法中的任何一种引发属性更改通知。

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/936304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档