为了账号安全,请及时绑定邮箱和手机立即绑定

绑定到静态属性

绑定到静态属性

绑定到静态属性我很难将一个简单的静态字符串属性绑定到文本框。下面是具有静态属性的类: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’处出错。知道我做错什么了吗?
查看完整描述

3 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

如果绑定需要双向,则必须提供路径.如果类不是静态的,那么可以对静态属性进行双向绑定:在资源中声明类的虚拟实例,并使用它作为绑定的源。

<Window.Resources>
    <local:VersionManager x:Key="versionManager"/></Window.Resources>...
    <TextBox Text="{Binding Source={StaticResource versionManager}, Path=FilterString}"/>


查看完整回答
反对 回复 2019-07-04
?
慕勒3428872

TA贡献1848条经验 获得超5个赞

你不能绑定到这样的静电。绑定基础结构无法获得更新通知,因为没有DependencyObject(或实现INotifyPropertyChanged)参与。

如果该值没有改变,只需放弃绑定并使用x:Static直接在Text财产。定义app下面是VersionManager类的命名空间(和程序集)位置。

<TextBox Text="{x:Static app:VersionManager.FilterString}" />

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

单身人士的一个例子:

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();
    }}
<TextBox Text="{Binding Source={x:Static local:VersionManager.Instance},
                        Path=FilterString}"/>


查看完整回答
反对 回复 2019-07-04
?
九州编程

TA贡献1785条经验 获得超4个赞

在.NET 4.5中,可以绑定到静态属性,读更多

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

public static event EventHandler MyPropertyChanged; 
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;

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


查看完整回答
反对 回复 2019-07-04
  • 3 回答
  • 0 关注
  • 555 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信