我目前正在尝试将此Silverlight Timeline实现到应用程序中。问题是,如果要填充此时间线,则需要通过url引用XML文件:
<timeline:TimelineTray.Urls>
<timeline:UriInfo Url="http://localhost:4444/Monet.xml" />
</timeline:TimelineTray.Urls>
但时间轴上显示的元素不是静态的。所以有几个页面我们将使用这个时间轴。在运行时,我们生成新的,编辑和删除项目。所以我必须通过XDocument类(Silverlight)生成动态XML“文档”。这工作正常,但后来我发现你必须通过url引用这个XML文档:
网址
';'带有要显示的事件的带有分隔的数据列表xmls。你需要 指定此参数或时间轴将显示为空白。
那么,我该如何解决这个问题呢?将XDocument从ViewModel绑定到TimeLine的方法不起作用。我不想保存这个生成的XDocument只是为了能够引用它。还有另一种方式吗?
修改 我发现了另一个解决方不过,这是通过代码隐藏:
var doc = new XDocument(
// stuff you'd like to get
);
timeLine.ResetEvents(doc);
还有一种方法可以在不生成XDocument的情况下生成事件。
如果有人能够更好地了解不需要代码隐藏的话,我仍然会喜欢任何答案。
答案 0 :(得分:1)
如果TimeLine控件不支持绑定到XDocument,并且您希望XDocument位于ViewModel中,则可以在View的代码隐藏中实现自己的PropertyChanged处理程序来刷新时间轴,例如
var myVM = this.DataContext as MyViewModelType;
if (myVM != null)
{
myVM.PropertyChanged += (s, e) =>
{
if (e.PropertyName == "MyXDocumentProperty")
{
this.timeLine.ResetEvents(myVM.MyXDocumentProperty);
}
};
}
然后当您的VM设置MyXDocumentProperty属性时,将触发PropertyChanged并刷新时间线。