2012-05-16 54 views
0

當前我直接從我的xaml.cs文件加載數據,但我現在想從XML文件加載數據,因爲我目前沒有關於如何執行的知識這個我在想,如果人可以幫助我,這是我當前的文件:從XML(WPF)加載數據

enter code here 


     //Create a viewmodel and add some data to it. 
     var viewModel = new MyViewModel(); 
     viewModel.Items.Add(new Data() { Name = "Yes", Type = "Yes", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "Yes", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "Yes", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "Unknown", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "Yes", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "Yes", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "Yes", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 
     viewModel.Items.Add(new Data() { Name = "No", Type = "No", Selected = true }); 

     //Set the window's datacontext to the ViewModel. This will make binding work. 
     this.DataContext = viewModel; 

    } 
} 

//This is the ViewModel used to bind data 
public class MyViewModel 
{ 
    //This could just be a List<Data> but ObservableCollection<T> will automatically 
    //update UI when items are added or removed from the collection. 
    public ObservableCollection<Data> Items { get; set; } 

    public MyViewModel() 
    { 
     Items = new ObservableCollection<Data>(); 
    } 
} 

//Just a sample class to hold the data for the grid. 
//This is the class that is contained in the ObservableColleciton in the ViewModel 
public class Data 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public bool Selected { get; set; } 
} 


//This is an example converter. It looks to see if the element is set to "Yes" 
//If so, it returns Visibility.Collapsed. Otherwise, it returns Visibility.Visible. 
public class YesToVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value != null && value is string) 
     { 
      var input = (string)value; 
      if (string.Equals(input, "Yes", StringComparison.CurrentCultureIgnoreCase)) 
      { 
       return Visibility.Collapsed; 
      } 
      else 
      { 
       return Visibility.Visible; 
      } 
     } 

     return Visibility.Visible; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

}

+2

請在搜索Google/StackOverflow之前發佈像這些常見問題... http://stackoverflow.com/questions/8972743/load-xmldataprovider-in-code –

+0

我會先看看MSDN,並檢查出主題與XML,XLinq,XML序列化相關。 HTH。 – code4life

回答

2

您可以利用XLinq要序列化/反序列化的XML數據。

例如:

系列化

public static String ToXml(ObservableCollection<Data> items) 
    { 
     try 
     { 
      XElement _items = new XElement("Root", 
           from item in items() 
           select new XElement("Item", 
            new XElement("Name", item.OrderId), 
            new XElement("Type", item.OrderType), 
            new XElement("Selected", item.Security) 
            ) 
            ); 

      return _items.ToString(); 

     } 
     catch (Exception ex) 
     { 


     } 
     return String.Empty; 
    } 

反序列化

public static ObservableCollection<Data> FromXml(String data) 
{ 
    ObservableCollection<Data> dataCollection = default(ObservableCollection<Data>); 
    try 
    { 
     XElement _items = XElement.Parse(data); 
     var items = _items.Elements("Item").Select(i 
      => 
      new Data 
      { 
       Name = i.Element("Name").Value, 
        Selected = bool.Parse(i.Element("Selected").Value), 
        Type = i.Element("Type").Value, 
      } 
     ).ToArray(); 

     if (items != null) 
     { 
      dataCollection = new ObservableCollection<Data>(); 
      foreach (var item in dataCollection) 
      { 
       dataCollection.Add(item); 
    } 
      return dataCollection; 
     } 
    } 
    catch (Exception e) 
    { 
    } 
    return null; 
} 

您可以用上面的功能與File.ReadAllTextFile.WriteAllText讀/寫字符串到文件中。

+0

感謝您的迴應,我決定直接使用SQL數據庫,現在我正在計算如何將信息寫入它:) –