Binding问题

-小仙- 2012-09-07 11:22:32
下面只是描述问题而写的例子,不用探究逻辑关系的合理与否。


public class StudentGroup : ViewModelBase
{
Student _stu;

public Student Stu
{
get { return _stu; }
set
{
_stu = value;
base.OnPropertyChanged("Stu");
}
}
}

public class Student : ViewModelBase
{
int _age;
string _name;

public int Age
{
get { return _age; }
set
{
_age = value;
base.OnPropertyChanged("Age");
}
}

public string Name
{
get { return _name; }
set
{
_name = value;
base.OnPropertyChanged("Name");
}
}
}



XAML:

<DataTemplate x:Key="myParamTemplate">
<Border Name="border" BorderBrush="Aqua" BorderThickness="1"
Padding="5" Margin="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Param:"/>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding Path=Age,UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="0" Grid.Column="2" Text="{Binding Path=Name,UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Border>
</DataTemplate>

<ContentControl Content="{Binding Path=Stu,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
ContentTemplate="{StaticResource myParamTemplate}"
Background="Red"/>



问题:
按照上面的设计,当myParamTemplate指定的TextBox的值发生改变时,Age值发生改变,Age.set访问器被调用。
那么,怎么样在Age.set访问器被调用的时候,即TextBox发生变化时,Stu.set访问器也被调用,即Age的值发生改变时,它的宿主对象Stu也能发生值改变通知呢?
...全文
163 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
-小仙- 2012-09-07
  • 打赏
  • 举报
回复
或者说,用怎么样的UI可以实现binding到Student对象,而不是他的属性。

从而将binding的操作提升一层,这样我就可以把焦点放在Student层了
-小仙- 2012-09-07
  • 打赏
  • 举报
回复
<DataTemplate DataType="{x:Type vm:StudentGroup }">
<vw:StudentGroupView/>
</DataTemplate>

名称等都是自己在表述这个问题是随便写的!
-小仙- 2012-09-07
  • 打赏
  • 举报
回复
没有人闲得慌,“杜撰”!
==============
逻辑关系如此。
MVVM模式中,
如果Model中是多层结构,要实现ViewModel,包裹到每一个属性是一件很痛苦的事情,如果可以当做整体包裹,在与UI间实现binding后也能收到 整包的属性改变就比较好了!

-小仙- 2012-09-07
  • 打赏
  • 举报
回复
stu 所属的Student类型,也是通过 DataTemplte 与XAML(View)进行关联的!
=============================================

我是想:如果我可以把Student当做整体进行 set和get,那么我就可以在
public Student Stu
{
get { return _stu; }
set
{
_stu = value;
base.OnPropertyChanged("Stu");
}
}

这里收到Stu的改变通知了,那么我就不用在ViewModel中包裹Stu中的每一个属性,并实现属性改变通知,
而且,假如在StudentGroup 类中,有几个与Student Stu类似的,类型为自定义类型(引用类型),
并且,这些属性间又有关系,这种关系又会影响到了数据校验。

如果我可以再StudentGroup层收到这些引用类型的改变通知,我做数据校验就很轻松了!
cheng2005 2012-09-07
  • 打赏
  • 举报
回复
这不现实,Stu不可能知道自己属于谁,所以没法通知。
这么诡异的需求是谁想的呢?我猜一定不是业务人员想的,多半是开发人员自己杜撰出来的需求。
-小仙- 2012-09-07
  • 打赏
  • 举报
回复
好冷清啊!
jackson所需要的所有jar jackson-all-1.6.2.jar jackson-core-asl-1.6.2.jar jackson-mapper-asl-1.6.2.jar jakarta-oro.jar 1. 背景 目前维护的产品使用jackson处理json,现整理一下jackson相关资料,希望对初次接触jackson的新手有所帮助。 jackson主页: http://jackson.codehaus.org/ jackson document: http://wiki.fasterxml.com/JacksonJavaDocs JacksonInFiveMinutes: http://wiki.fasterxml.com/JacksonInFiveMinutes 本文主要内容译自JacksonInFiveMinutes,增加了部分示例,转载请注明出处。 受java平台上各种处理xml的类库(StAX, JAXB等)启发,Jackson提供一种处理json的java类库。Jackson的目标是为开发者提供快速、准确、轻量级和用起来最爽的json处理类库。本文将概括介绍Jackson的主要功能和相关功能的使用示例。 2. 使用方式 Jackson提供三种可选的json处理方式: 1) Streaming API 又称Incremental parsing/generation, 受StAX API启发,以非关联递增方式读写json内容。 通过 org.codehaus.jackson.JsonParser读取,通过org.codehaus.jackson.JsonGenerator写入。 2) Tree Model 通过基于内存的树形结构来描述json数据,和 XML DOM类似。通过org.codehaus.jackson.map.ObjectMapper构建树,树由JsonNode节点组成。 3) Data Binding 基于属性访问或注解的方式将json和POJO对象互相转换, 受JAXB基于注解的处理方式启发。通过org.codehaus.jackson.map.ObjectMapper读写json数据。它包含两种类型: 3.1 Simple Data Binding 用于json和Java Maps, Lists, Strings, Numbers, Booleans and nulls的相互转换。 3.2 Full Data Binding 用于json和Java Bean的相互转换。 下面从使用的角度上比较三种处理方式: Streaming API 执行效率最高,读写速度最快,另外两种方式都基于它实现; Tree Model 是最灵活的; Data Binding 通常是最方便使用的;

8,737

社区成员

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

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