2014-04-18 116 views
0

我試圖搜索和閱讀很多文章,但我仍然不知道如何在我的例子中使用MVVM。我有一個包含兩個文本框(如名稱和說明),一個ListPicker和保存按鈕的頁面。我猜模型會是這樣的:如何將用戶輸入數據保存到XML根據MVVM

public class MyItem 
{ 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public Enum Categories { get; set; } 
} 

現在我不知道如何概念ViewModel(也許查看)。我想將這些數據(由用戶填充)保存到XML文件中,稍後在另一個頁面上保存已保存的MyItem列表,並在點擊後顯示詳細信息,但我希望以後能夠做到這一點。 我知道如何使用XML數據,我只是不知道如何使用ViewModel保存非硬編碼數據。

感謝您的幫助和解釋。

編輯:

public class MyItemViewModel 
{ 

    public MyItemViewModel() 
    { 
     SaveCommand = new DelegateCommand(SaveToXml()); 
    } 

    public ICommand SaveCommand { get; set; } 
    public ObservableCollection<MyItem> MyItems { get; set; } 


    private Action<object> SaveToXml() 
    { 
    // Saving data to XML 
    } 
} 

錯誤:MyItemViewModel.SaveToXml()':不是所有的代碼路徑返回一個值

回答

1

你需要做的是綁定到Button的Command屬性,然後設置您的視圖模型一個ICommand屬性:

比方說這是你的按鈕,這是由DataContext的綁定到您的視圖模型

<Button x:Name="myButton" Command="{Binding MyButtonClickCommand}" /> 
<ListView ItemsSource="{Binding MyItems}" SelectedItem="{Binding MySelectedItem}"/> 

你有什麼現在要做的就是去你的視圖模型,並添加ICommand類型的屬性:

公衆的ICommand MyButtonClickCommand {獲得;私人設置; }

我通常喜歡用一個具體的命令調用DelegateCommand通過構造函數來設置命令:

public MyClass() 
{ 
    MyButtonClickCommand = new DelegateCommand(YourMethodWhichSavesToXml); 
} 

,然後,只需創建它負責保存XML到磁盤的方法(改變位置在XmlTextWriter對象到您的手機正確的位置)內:

private void YourMethodWhichSavesToXml() 
{ 
    var serializer = new XmlSerializer(typeof(MyItem)); 
    using (var writer = new XmlTextWriter(@"C:\mylocation", Encoding.UTF8)) 
    { 
     serializer.Serialize(_myItem, writer);  
    } 
} 

編輯

您的ViewModel應該擁有您想要在視圖內綁定的所有屬性。 比方說你有,你要綁定到你的ListView MyItems列表,那麼它可能看起來像這樣:

public class MyViewModel 
{ 
    public MyViewModel() 
    { 
     MyCommand = new DelegateCommand(YourMethodWhichSavesToXml()); 
    } 

    public ICommand MyCommand { get; set; } 

    public ObservableCollection<MyItem> MyItems { get; set; } 

    public MyItem MySelectedItem { get; set; } 

    private void YourMethodWhichSavesToXml() 
    { 
     var serializer = new XmlSerializer(typeof(MyItem)); 
     using (var writer = new XmlTextWriter(@"C:\mylocation", Encoding.UTF8)) 
     { 
      serializer.Serialize(MySelectedItem, writer); 
     } 
    } 
} 
+0

不知道,「C:\ mylocation」存在於Windows Phone的;) – Xaruth

+0

好,謝謝,但你能不能概述我的視圖模型的外觀? – petrppe

+0

添加了一個viewmodel大綱:) –