Silverlight绑定问题

时间:2011-02-18 00:37:50

标签: silverlight data-binding

全部好,

我第一次尝试使用Silverlight,我有一个关于绑定的问题。我有一个绑定到自定义数据对象的表单。在那,因为我有两个标记为这样的框:

驾驶Experiece [文本框]年[文本框]月。

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

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

先谢谢

3 个答案:

答案 0 :(得分:2)

您可以通过实施IMultiValueConverter在WPF中执行此操作,但不幸的是,Silverlight不支持此功能。

最好的选择通常是让ViewModel处理这个问题。它可以创建一个“月”和“年”属性,它会自动与您的DrivingExperienceMonths值同步。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

编辑:正如我刚才注意到的那样(而Copsey在他的回答中指出),如果您需要双向绑定,这将无法解决。最好在两个独立的属性中进行转换......

这样的事情:

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; }
}