引用对象的url

时间:2012-01-19 18:54:07

标签: c# xml silverlight url linq-to-xml

我目前正在尝试将此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的情况下生成事件。

如果有人能够更好地了解不需要代码隐藏的话,我仍然会喜欢任何答案。

1 个答案:

答案 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并刷新时间线。