关于数据绑定的问题

daview 2010-05-05 05:48:03
写了个UI,设置了相关对象,希望通过代码在设置UI对象的DataContext对象的时候,能执行绑定数据,结果失败。

请问有什么办法解决?

我的XAML代码如下


<StackPanel VerticalAlignment="Stretch" Grid.Column="1" Width="Auto" Orientation="Horizontal" x:Name="currentUserInfo">
<ContentControl Content="当前用户:" VerticalContentAlignment="Center" />
<Button Width="Auto" VerticalAlignment="Stretch" Click="ShowContextMenu">
<StackPanel VerticalAlignment="Stretch" Background="#0ff0" Width="Auto" Orientation="Horizontal">
<ContentControl x:Name="currentCorp" VerticalContentAlignment="Center" Content="{Binding CorpName}" />
<ContentControl Content="↑" VerticalContentAlignment="Center" />
</StackPanel>
<ToolTipService.ToolTip>{Binding CorpNotifyInfo}</ToolTipService.ToolTip>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu HorizontalAlignment="Left" VerticalAlignment="Top" >
<toolkit:MenuItem Header="更换公司" Command="{Binding MenuItemCommand}" CommandParameter="{Binding ChangedCorp}" Visibility="{Binding MoreCorps}" />
<toolkit:Separator Visibility="{Binding MoreCorps}" />
<toolkit:MenuItem Header="重新加载" Command="{Binding MenuItemCommand}" CommandParameter="{Binding ReloadCorp}" />
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
</Button>
<ContentControl Content="→" VerticalContentAlignment="Center" />
<Button Width="Auto" VerticalAlignment="Stretch" Click="ShowContextMenu">
<StackPanel VerticalAlignment="Stretch" Width="Auto" Orientation="Horizontal" >
<ContentControl x:Name="currentUser" VerticalContentAlignment="Center" Content="{Binding UserName}" />
<ContentControl Content="↑" VerticalContentAlignment="Center" />
</StackPanel>
<ToolTipService.ToolTip>{Binding UserNotifyInfo}</ToolTipService.ToolTip>
</Button>
</StackPanel>



CS代码如下(在Loaded事件的时候执行):


var user = this.CurrentUser;
if (user != null)
{
var userName = user.ExtInfo.Name;
var corp = (from c in user.UserCorpList where c.Selected select c.CorpInfo).SingleOrDefault();
var corpName = corp.Name_S ?? "OA系统";
var corpFullName = corp.Name_L ?? "OA系统";
var data = new
{
CorpNotifyInfo = corpFullName,
UserName = userName,
CorpName = corpName,
MoreCorps = user.UserCorpList.Count > 1 ? Visibility.Collapsed : Visibility.Visible,
ChangeCorp = MenuCommand.ChangeCorp,
ReloadCorp = MenuCommand.ReloadCorp
};
this.currentUserInfo.DataContext = data;
}
...全文
89 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
websco 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 daview 的回复:]
3——
不能使用匿名对象(这个问题其实第一和第二已经解释,匿名对象是私有类、内容是字段形式表示的)
[/Quote]

秋后算帐来了,找这个帖子找得好累啊。

匿名类的内容不是字段Field,而是只读属性Property.

http://msdn.microsoft.com/zh-cn/library/bb397696.aspx
websco 2010-05-06
  • 打赏
  • 举报
回复

<ToolTipService.ToolTip>{Binding CorpNotifyInfo}</ToolTipService.ToolTip>


Binding 还能这样子写啊? 这样写只会在出现 ToolTip 时显示出文本“{Binding CorpNotifyInfo}”,而不是你想要绑定的内容。

不过这并不是楼主说的出错的原因,不Debug或看到错误提示,还真是看不出来错在哪。

也许是跟使用了匿名类有关,我运行如下代码

<Button Content="{Binding Text}" Width="120" Height="30" Name="btn"
ToolTipService.ToolTip="{Binding Text}" Visibility="{Binding Vis}">


this.Loaded +=(sender ,e)=>
{
this.btn.DataContext = new { Text = "名称ABC", Vis= Visibility.Collapsed };
};

匿名类的绑定起不了任何作用。
websco 2010-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 daview 的回复:]
1——
只能对属性操作(PROPERTY),不能对字段(FIELD)操作。

2——
目标类必须是PUBLIC的,目标属性也必须是PUBLIC的。
[/Quote]
汗一个,这个是规定,只能是 public 的 Property ,不可能是 public 的 Field

[Quote=引用 3 楼 daview 的回复:]
3——
不能使用匿名对象(这个问题其实第一和第二已经解释,匿名对象是私有类、内容是字段形式表示的)[/Quote]
这个学习了,谢谢。
其实看到楼主使用匿名类进行绑定我是眼前一亮,马上就进行尝试,可惜不行,楼主的解释很有道理。
我一直以来都是使用动态类型进行类似的Binding的,当然不是使用的.NET 4.0中的dynamic,而是 Reflection 。
daview 2010-05-06
  • 打赏
  • 举报
回复
感谢两位!

得益于websco的提示,经实验,数据绑定:

1——
只能对属性操作(PROPERTY),不能对字段(FIELD)操作。

2——
目标类必须是PUBLIC的,目标属性也必须是PUBLIC的。
(这个问题很奇怪,不知道为什么,MS在SL中禁止通过REFLECTER机制来操纵PRIVATE的内容,而跨模块的时候,INTERNAL也不可以操作,只能操作PUBLIC的)

3——
不能使用匿名对象(这个问题其实第一和第二已经解释,匿名对象是私有类、内容是字段形式表示的)

再次感谢2位。只是感觉,MS这样做,让数据操作会很麻烦,匿名类的强力应用在SL中就此打个折扣,BS下!
jv9 2010-05-05
  • 打赏
  • 举报
回复
debug一下,看看currentUserInfo.DataContext 是否有数据? 失败错误提示是什么?

8,756

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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