急问一个WPF如何绑定到全局结构变量(非全局数组变量)的问题

charm 2010-06-22 07:18:41
问题描述:
(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 声明绑定源,因为我这里不是集合,就一个单独的结构。

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


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


...全文
1341 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
四维空间151 2012-09-17
  • 打赏
  • 举报
回复
我只想在前台xaml中绑定变量,我操,怎么就搞不起来呢
namhyuk 2010-06-23
  • 打赏
  • 举报
回复
参考一下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.
leon0905 2010-06-23
  • 打赏
  • 举报
回复
不明白你为什么要用CollectionViewSource,如果非要绑定静态类不可得话,可以用{x:Static YourNamespace:YourType.YourProperty}作为绑定源,个人认为最好不要用静态类作为绑定源,可以使用单例,达到一样的效果,将对象绑定到UI就简单了
charm 2010-06-23
  • 打赏
  • 举报
回复
真是很难啊
charm 2010-06-23
  • 打赏
  • 举报
回复
to:leon0905
我跟你的说法本质是一样的
<CollectionViewSource
Source="{Binding Source={x:Static Application.Current}, Path=LocalInfo}"
x:Key="LocalInfoView" />

只不过包了一层啊,你的那种方式可以在控件里面直接用,我是声明在资源标记里面了,所以要封一下
charm 2010-06-23
  • 打赏
  • 举报
回复
to:leon0905
我知道你的意思,但是我不是某个类里面有个静态类型的属性的绑定
不过很感谢你,让我知道怎么绑定静态类型属性的方式

不过从道理上来讲,静态变量(对象)也是全局的,是不是也可以参照参照,按照你的说法我怎么改呢?
leon0905 2010-06-23
  • 打赏
  • 举报
回复
{x:Static YourNamespace:YourType.YourProperty}不是重新生成一个对象,可通过这种方式直接绑定静态类的属性
charm 2010-06-23
  • 打赏
  • 举报
回复
to:namhyuk
<Window.Resources>
<my:NorthwindDataSet x:Key="northwindDataSet" />
<CollectionViewSource x:Key="productsViewSource" Source="{Binding Path=Products, Source={StaticResource northwindDataSet}}" />
</Window.Resources>
...
<Grid DataContext="{StaticResource productsViewSource}">

你这代码我是这么理解的:生成一个名为northwindDataSet 类型为NorthwindDataSet的对象实例
后面那个CollectionViewSource 是对该实例包装一下(视图实例),然后再绑定到目标

我怀疑你说说的:my:NorthwindDataSet 是一个集合对象
我这个不是从集合对象派生的
charm 2010-06-23
  • 打赏
  • 举报
回复
补充:
1,全局变量是非collection对象,我是在App初始化话时从磁盘读出来的
2.leon0905 你这种方式{x:Static YourNamespace:YourType.YourProperty} 不就是又生成了一个对象吗?我要的是app中读出来或者已经初始化好的数据源
3 to:namhyuk 你的xaml实际是leon的是一个意思。另外,数据源已经设置好了的,我通过象leon所说的那样重新生生成一个对象,是可以绑定到内容的。

问题归结点是:如何绑定到全局的非集合且已初始化自定义对象

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧