从 XML 加载数据 (WPF)

本文关键字:WPF 数据 XML 加载 | 更新日期: 2023-09-27 18:34:25

目前我直接从我的 xaml.cs 文件加载数据,但我现在想让它从 XML 文件加载,因为我目前不知道如何做到这一点我想知道人们是否可以帮助我,这些是我当前的文件:

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();
    }
}

}

从 XML 加载数据 (WPF)

您可以利用 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.ReadAllText,File.WriteAllText一起使用,以将字符串读/写到文件中。