サンプルWPFアプリケーションをMVVMに変換して、C#/ WPF/MVVMを学びたいと思っています。このアプリは編集用のxmlファイルを開き、保存します。私がファイルを保存しようとするまで、アプリはうまくプリフォームする、私はInvalidCastExceptionを取得しています。ここではいくつかのコードが
mDataSource.csMVVM xDocファイルの例外を保存しない
public static List<MediaItem> Load(string filename)
{
var mediafiles = XDocument.Load(filename).Root.Elements("style").Elements("item").Select(
x => new MediaItem(
(string)x.Element("title"),
(string)x.Element("artist"),
(string)x.Element("year")));
return mediafiles.ToList();
}
MainViewModel.csある - xmlファイルをロードし
public void LoadList(string filename)
{
this.mediafiles = new ObservableCollection<MediaItemViewModel>();
List<MediaItem> mediabaseList = mDataSource.Load(filename);
foreach (MediaItem mediaitem in mediabaseList)
{
this.mediafiles.Add(new MediaItemViewModel(mediaitem));
}
this.collectionView = CollectionViewSource.GetDefaultView(mediafiles);
if (this.collectionView == null)
throw new NullReferenceException("collectionView");
this.collectionView.CurrentChanged += new EventHandler(this.OnCollectionViewCurrentChanged);
}
保存ファイル
private void Save(ICollectionView collectionView)
{
mDataSource mds = new mDataSource();
mds.Save(this.collectionView);
}
mDataSource - データをデバッグ時に、ファイルを保存しますどこでも適切に表示されますが、例外は次の行にあります - MediaItem mi =(MediaItem)mediaitem; { " 'mList.Models.MediaItem' と入力して 'mList.ViewModels.MediaItemViewModel' タイプのオブジェクトをキャストすることができません。"}
public void Save(ICollectionView collectionView)
{
XDocument xdoc = new XDocument();
XElement xeRoot = new XElement("art");
XElement xeSubRoot = new XElement("style");
foreach (var mediaitem in collectionView)
{
MediaItem mi = (MediaItem)mediaitem;
XElement xRow = new XElement("item");
xRow.Add(new XElement("title", mi.Title));
xRow.Add(new XElement("artist", mi.Artist));
xRow.Add(new XElement("year", mi.Year));
xeSubRoot.Add(xRow);
}
xeRoot.Add(xeSubRoot);
xdoc.Add(xeRoot);
xdoc.Save(filename);
}
自分の中で参照すべきではない
はい!あなたの答えは素晴らしいでしょうか。私がもっと学ぶと、ICollectionViewのより良い場所を探します - もう一度ありがとう –