绑定到静态属性

绑定到静态属性

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

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

public class VersionManager{
    private static string filterString;

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

在我的XAML中,我只想将这个静态属性绑定到一个文本框:

<TextBox>
    <TextBox.Text>
        <Binding Source="{x:Static local:VersionManager.FilterString}"/>
    </TextBox.Text></TextBox>

所有东西都会编译,但是在运行时,我得到了以下异常:

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

知道我做错什么了吗?


一只甜甜圈
浏览 564回答 3
3回答

慕哥9229398

如果绑定需要双向,则必须提供路径.如果类不是静态的,那么可以对静态属性进行双向绑定:在资源中声明类的虚拟实例,并使用它作为绑定的源。<Window.Resources> &nbsp;&nbsp;&nbsp;&nbsp;<local:VersionManager&nbsp;x:Key="versionManager"/></Window.Resources>... &nbsp;&nbsp;&nbsp;&nbsp;<TextBox&nbsp;Text="{Binding&nbsp;Source={StaticResource&nbsp;versionManager},&nbsp;Path=FilterString}"/>

慕勒3428872

你不能绑定到这样的静电。绑定基础结构无法获得更新通知,因为没有DependencyObject(或实现INotifyPropertyChanged)参与。如果该值没有改变,只需放弃绑定并使用x:Static直接在Text财产。定义app下面是VersionManager类的命名空间(和程序集)位置。<TextBox&nbsp;Text="{x:Static&nbsp;app:VersionManager.FilterString}"&nbsp;/>如果值确实发生了变化,我建议创建一个单例来包含该值并绑定到该值。单身人士的一个例子:public&nbsp;class&nbsp;VersionManager&nbsp;:&nbsp;DependencyObject&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;readonly&nbsp;DependencyProperty&nbsp;FilterStringProperty&nbsp;= &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DependencyProperty.Register(&nbsp;"FilterString",&nbsp;typeof(&nbsp;string&nbsp;), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typeof(&nbsp;VersionManager&nbsp;),&nbsp;new&nbsp;UIPropertyMetadata(&nbsp;"no&nbsp;version!"&nbsp;)&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;FilterString&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get&nbsp;{&nbsp;return&nbsp;(string)&nbsp;GetValue(&nbsp;FilterStringProperty&nbsp;);&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set&nbsp;{&nbsp;SetValue(&nbsp;FilterStringProperty,&nbsp;value&nbsp;);&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;VersionManager&nbsp;Instance&nbsp;{&nbsp;get;&nbsp;private&nbsp;set;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;VersionManager()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Instance&nbsp;=&nbsp;new&nbsp;VersionManager(); &nbsp;&nbsp;&nbsp;&nbsp;}}<TextBox&nbsp;Text="{Binding&nbsp;Source={x:Static&nbsp;local:VersionManager.Instance}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Path=FilterString}"/>

九州编程

在.NET 4.5中,可以绑定到静态属性,读更多可以使用静态属性作为数据绑定的源。如果引发静态事件,数据绑定引擎将识别属性值何时更改。例如,如果类SomeClass定义了一个名为MyProperty的静态属性,SomeClass可以定义一个在MyProperty值更改时引发的静态事件。静态事件可以使用以下任一签名:public&nbsp;static&nbsp;event&nbsp;EventHandler&nbsp;MyPropertyChanged;&nbsp; public&nbsp;static&nbsp;event&nbsp;EventHandler<PropertyChangedEventArgs>&nbsp;StaticPropertyChanged;注意,在第一个例子中,类公开了一个名为PropertyNameChanged的静态事件,该事件将EventArgs传递给事件处理程序。在第二个例子中,类公开一个名为StaticPropertyChanged的静态事件,该事件将PropertyChangedEventArgs传递给事件处理程序。实现静态属性的类可以选择使用任一方法引发属性更改通知。
打开App,查看更多内容
随时随地看视频慕课网APP