我很难将一个简单的静态字符串属性绑定到一个TextBox。
下面是具有静态属性的类:
public class VersionManager
{
private static string filterString;
public static string FilterString
{
get { return filterString; }
set { filterString = value; }
}
}
在我的xaml中,我只想将这个静态属性绑定到一个TextBox:
<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’出错。
知道我做错了什么吗?
发布于 2009-06-02 09:25:53
如果绑定需要是双向的,则必须提供路径。
在静态属性上进行双向绑定有一个诀窍,只要类不是静态的:在资源中声明类的一个虚拟实例,并将其用作绑定的源。
<Window.Resources>
<local:VersionManager x:Key="versionManager"/>
</Window.Resources>
...
<TextBox Text="{Binding Source={StaticResource versionManager}, Path=FilterString}"/>
发布于 2009-06-01 19:25:07
你不能绑定到像那样的静电。由于不涉及DependencyObject
(或实现INotifyPropertyChanged
的对象实例),因此绑定基础结构无法获得更新通知。
如果该值没有更改,只需丢弃绑定,直接在Text
属性中使用x:Static
即可。将下面的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}"/>
发布于 2011-09-22 21:54:59
在.NET 4.5中,可以绑定到静态属性、read more
您可以将静态属性用作数据绑定的源。如果引发静态事件,数据绑定引擎会识别属性值何时发生更改。例如,如果类SomeClass定义了一个名为MyProperty的静态属性,则SomeClass可以定义一个在MyProperty的值更改时引发的静态事件。静态事件可以使用以下签名之一:
public static event EventHandler MyPropertyChanged;
public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
请注意,在第一种情况下,该类公开了一个名为PropertyNameChanged的静态事件,该事件将EventArgs传递给事件处理程序。在第二种情况下,该类公开一个名为StaticPropertyChanged的静态事件,该事件将PropertyChangedEventArgs传递给事件处理程序。实现静态属性的类可以选择使用这两种方法中的任何一种引发属性更改通知。
https://stackoverflow.com/questions/936304
复制相似问题