2011-02-18 72 views
0

全部,Silverlight绑定问题

我第一次尝试使用Silverlight,我有一个关于绑定的问题。我有一个绑定到自定义数据对象的表单。对此,我有两个箱子标记为:

驾驶Experiece [Textbox]年[Textbox]个月。

我需要将它绑定到DrivingExperienceMonths的一个整数属性。举例来说,如果DrivingExperienceMonths等于29,我会在年份文本框中看到2,在月份文本框中看到5。

我当然可以为文本框中的文本更改事件添加一个侦听器并以这种方式处理它,但表单上的其他所有内容都使用了TwoWay绑定,并且我希望这可以。

由于提前

回答

2

你可以通过实施IMultiValueConverter为此在WPF,但不幸的是,这不是在Silverlight的支持。

最好的选择是让你的ViewModel处理这个问题。它可以创建一个“Months”和“Years”属性,并自动同步到您的DrivingExperienceMonths值。

如果您只想使用OneWay绑定(仅用于显示),则可以使用两个IValueConverter。对于TwoWay数据绑定,它将不得不在代码中处理。

+0

一个侧面说明,像devexpress一些第三方工具支持多重绑定。此处还有一个博客,您可以下载允许您进行多重绑定的扩展程序http://www.scottlogic.co.uk/blog/colin/2010/05/silverlight-multibinding-solution-for-silverlight-4/。 – 2011-02-18 06:16:44

0

我想创建一个值转换器(从的IValueConverter派生类),其将整数转换到完整的字符串。然后您将在绑定中设置ValueConverter的一个实例。

+0

这只适用于单向绑定,因为有两个不同的值。这是不可能做到这一点ConvertBack ... – 2011-02-18 00:44:17

0

你或许可以创建一个value converter从该属性(通过ConverterParameter指定)提取相应的信息

编辑:正如我刚才注意到(和科普塞在他的回答说明),这是行不通了如果你需要双向绑定。更好地做转换在两个单独的属性...

事情是这样的:

public int DrivingExperienceMonths { get; set; } 

public int ExpMonths 
{ 
    get { return DrivingExperienceMonths % 12; } 
    set { DrivingExperienceMonths = (ExpYears * 12) + value; } 
} 

public int ExpYears 
{ 
    get { return DrivingExperienceMonths/12; } 
    set { DrivingExperienceMonths = (value * 12) + ExpMonths; } 
}