我有一个关于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
答案 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);
我认为这会做你想要的!