日期:2014-05-17  浏览次数:21177 次

急问一个WPF如何绑定到全局结构变量(非全局数组变量)的问题
问题描述:
(1)有一个类(实际是结构) 如LocalInfo(从INotifyPropertyChanged派生),里面有几个变量,同时有相应的set,get
(2) 在程序开始的时候new一个全局的LocalInfo对象(里面赋了初值)
(3)在一个窗体中如下声明:
 <Window.Resources>
  <CollectionViewSource 
  Source="{Binding Source={x:Static Application.Current}, Path=LocalInfo}"  
  x:Key="LocalInfoView" />
  </Window.Resources>
(4)在窗体的一个子控件中如下绑定(XAML):
<TextBox Grid.Column="1" Grid.ColumnSpan="2" Height="23" HorizontalAlignment="Center" Margin="22,1,29,1" Name="textBoxLocalName" VerticalAlignment="Center" Width="118" Text="{Binding Path=LocalName}"/>

这里的LocalName是LocalInfo的一个变量的set,get方法

折腾了一下午也没有在textBox中将 内容显示出来(而我用在窗口的xaml中定义一个变量时可以的:如在xaml中的定义资源:<my:LocalInfo x:Key="LocalInfoView" >

我现在怀疑是不是不能用CollectionViewSource 声明绑定源,因为我这里不是集合,就一个单独的结构。

问题的总体描述是:
我的程序有一个配置信息,需要在一个界面中配置这些信息。


不知道说清楚了没,有人知道吗?非常感谢




------解决方案--------------------
不明白你为什么要用CollectionViewSource,如果非要绑定静态类不可得话,可以用{x:Static YourNamespace:YourType.YourProperty}作为绑定源,个人认为最好不要用静态类作为绑定源,可以使用单例,达到一样的效果,将对象绑定到UI就简单了
------解决方案--------------------
参考一下vs2010自动生成的代码:

<Window.Resources>
<my:NorthwindDataSet x:Key="northwindDataSet" />
<CollectionViewSource x:Key="productsViewSource" Source="{Binding Path=Products, Source={StaticResource northwindDataSet}}" />
</Window.Resources>
...
<Grid DataContext="{StaticResource productsViewSource}">

我怀疑是不是在包含TextBox的控件上没有指定DataContext.