ReactiveUI中的复合输出属性

时间:2015-03-12 07:26:19

标签: c# reactiveui

我有一个关于activeui视图模型的问题。

我的视图模型,月和年有两个属性,并且希望有另一个输出属性DateLabel,它填充两者并很好地格式化,例如“2015年1月”。

这第三个属性依赖于另外两个属性,因为要么更新这个属性,并且还应该更新绑定到此属性的任何内容。

阅读了ReactiveUI文档后,我认为输出属性是我需要的,但是当一个或另一个依赖属性没有变化时,我只能获得更新的标签。这是通过以下代码实现的。

readonly ObservableAsPropertyHelper<string> dateLabel;

public string DateLabel {
    get { return dateLabel.Value; }
}

this.WhenAnyValue (x => x.Month)
  .Select (x =>  CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName (x) + this.Year)
  .ToProperty (this, x => x.DateLabel, out dateLabel);

this.WhenAnyValue (x => x.Year)
  .Select (x =>  CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName (this.Month) + x)
  .ToProperty (this, x => x.DateLabel, out dateLabel);

在此示例中,第二个WhenAnyValue似乎覆盖了第一个,因此Year中的任何更改都会反映在DateLabel的更改中,但对Month的任何更改都不会,如果我切换订单,则会反映对Month的任何更改年份的任何变化。

我确信我只是遗漏了一些非常基本的东西,并且非常感谢任何帮助。

谢谢,Ed

1 个答案:

答案 0 :(得分:3)

尝试以下方法:

this.WhenAnyValue (x => x.Month, y => y.Year )
.Select (x => String.Format("{0} {1}", CultureInfo.CurrentCulture.DateTimeFormat.GetAbbreviatedMonthName (x.Item1), x.Item2))
.ToProperty (this, x => x.DateLabel, out dateLabel);

我认为这会做你想要的!