2012-01-19 11 views
0

私は現在、このSilverlight Timelineをアプリケーションに実装しようとしています。問題は、このタイムラインを埋めるためにしたい場合は、URLを介してXMLファイルを参照する必要があるということです。オブジェクトを参照するURL

<timeline:TimelineTray.Urls> 
    <timeline:UriInfo Url="http://localhost:4444/Monet.xml" /> 
</timeline:TimelineTray.Urls> 

しかし、タイムライン上に表示されている要素は静的ではありません。したがって、このタイムラインを使用するいくつかのページがあります。実行時に、新しいアイテムを編集、削除します。だから私はXDocumentクラス(Silverlight)を介して動的なXML "ドキュメント"を生成しなければなりませんでした。それはうまく働いたが、その後、私はあなたがURLを介して、このXMLドキュメントを参照するために持っていることを見た:

のURL

「;」表示するイベントを含むデータxmlの区切りリスト。 を指定する必要があります。このパラメータを指定すると、タイムラインが空白になります。

どうすれば問題を解決できますか? ViewModelからXDocumentをTimeLineにバインドする方法は機能しません。私はこの生成されたXDocumentをそれを参照できるように保存したくありません。別の方法がありますか?

編集: 他の解決策が見つかりました。これは、しかし、分離コードを通じてだ:

var doc = new XDocument(
    // stuff you'd like to get 
); 
timeLine.ResetEvents(doc); 

XDocumentを発生させずにイベントを生成する方法もあります。

誰かがコードビハインドを必要としない優れたアイデアを得るなら、私はまだ答えが好きです。

答えて

1

TimeLineコントロールがXDocumentへのバインディングをサポートしておらず、XDocumentをViewModelにしたい場合は、ビューのコードビヘイビア内に独自のPropertyChangedハンドラを実装してタイムラインを更新することができます。あなたのVMがMyXDocumentPropertyプロパティを設定するとき

var myVM = this.DataContext as MyViewModelType; 
if (myVM != null) 
{ 
    myVM.PropertyChanged += (s, e) => 
     { 
      if (e.PropertyName == "MyXDocumentProperty") 
      { 
       this.timeLine.ResetEvents(myVM.MyXDocumentProperty); 
      } 
     }; 
} 

その後、のPropertyChangedが発火するとタイムラインが更新されます。

関連する問題