将 XAML 控件绑定到应用程序数据文件

master_ruko

我有一个包含处理 ApplictonData 的所有功能的服务类

public class AppSettings : INotifyPropertyChanged
{
    private static volatile AppSettings _instance;

    private ApplicationDataContainer _localData;
    private ApplicationDataContainer _roamingData;
    private StorageFolder _localFolder;
    private StorageFolder _roamingFolder;

    ... 
    //Code to make AppSettings a singleton class. 
    //Using AppSettings.Instance to access public properties/methods
    ...

    private void SaveSettings(string key, object value, bool roaming = false)
    {
        if (roaming)
            _roamingData.Values[key] = value;
        else
            _localData.Values[key] = value;
    }

    private T ReadSetting<T>(string key, T defaultValue = default(T), bool roaming = false)
    {
        if (roaming)
        {
            if (_roamingData.Values.ContainsKey(key))
                return (T)_roamingData.Values[key];
        }
        else if (_localData.Values.ContainsKey(key))
            return (T)_localData.Values[key];

        return defaultValue;
    }

    public async void SaveToFile<T>(T obj, string propName, bool roaming = false)
    {
        StorageFile file = await (roaming ? _roamingFolder : _localFolder).CreateFileAsync(propName, CreationCollisionOption.ReplaceExisting);
        await FileIO.WriteTextAsync(file, JsonConvert.SerializeObject(obj), UnicodeEncoding.Utf8);
    }

    public async Task<T> LoadFromFile<T>(string propName, bool roaming = false)
    {
        try
        {
            StorageFile file = await (roaming ? _roamingFolder : _localFolder).GetFileAsync(propName);
            return JsonConvert.DeserializeObject<T>(await FileIO.ReadTextAsync(file, UnicodeEncoding.Utf8));
        }
        catch (Exception)
        {
            return default;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged([CallerMemberName]string propName = "")
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
    }


    //List all setting here
    public string exampleProp
    {
        get => ReadSetting<string>(nameof(exampleProp));
        set
        {
            SaveSettings(nameof(movie_staging_folder), value, false);
            NotifyPropertyChanged();
        }
    }

    ... 
    // Other properties
    ...
}

这适用于单值属性,例如:

<TextBox Text="{x:Bind services:AppSettings.Instance.exampleProp, Mode=TwoWay}"
         ... />

我的问题是绑定到多值属性。我有一个ListView显示用户选择的目录列表。我制作SaveToFile()LoadFromFile()(反)序列化一个对象,在我的例子中是一个 ObservableCollection,并将它保存/加载为 ApplicationData 文件夹中的文件。我不知道如何将它绑定到ListView ItemsSource.

Faywang - MSFT

您可以在 ObservableCollection 中声明一个属性以接收来自 LoadFromFile() 的反序列化集合并将该属性绑定到 listView 的 ItemsSource。

public AppSettings()
{
    InitializeMyList();​
}​

private async void InitializeMyList() 
{
    myLists = await LoadFromFile<ObservableCollection<String>>("");​
}
private ObservableCollection<string> myLists = new ObservableCollection<string>();
public ObservableCollection<string> MyLists 
{
    get {
        return myLists;
    }
    set {
            ......
    }
}

.xaml:

<ListView ItemsSource="{x:Bind services:AppSettings.Instance.MyLists}"></ListView>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

XAML:将FontSize绑定到控件的高度

来自分类Dev

将位图绑定到XAML

来自分类Dev

XAML将控件属性绑定到指定的样式

来自分类Dev

从ViewModel正确设计将数据绑定到视图中的XAML控件的设计

来自分类Dev

是将数据从mvvm概念绑定到xaml的权利

来自分类Dev

使用Visual Studio安装程序项目将文件安装到每个用户“应用程序数据文件夹”

来自分类Dev

将XAML图像保存到Metro应用程序的文件中

来自分类Dev

XAML 将列表转换为控件列表

来自分类Dev

如何将应用程序资源添加到应用程序的C#后端而不是XAML文件中?

来自分类Dev

将字符串与绑定XAML连接

来自分类Dev

将数据绑定到Windows 8应用程序的ListView

来自分类Dev

将XAML页面集成到Storyboard中

来自分类Dev

如何将修改后的属性绑定到控件Windows Universal Apps(XAML / C#)

来自分类Dev

将颜色属性从XAML绑定到C#

来自分类Dev

将XAML中的字体真棒字符绑定到文本

来自分类Dev

如何使用XAML将DataGrid绑定到CollectionViewSource

来自分类Dev

Xamarin Xaml将按钮的高度绑定到Label的高度

来自分类Dev

将列表框绑定到XAML中的SelectionChanged ComboBox

来自分类Dev

如何将itemSource绑定到XAML中的列表

来自分类Dev

如何将GridView绑定到XAML中的视频列表?

来自分类Dev

将根属性绑定到XAML中子元素的值

来自分类Dev

将高度/宽度绑定到XAML中的子元素

来自分类Dev

将XAML TreeView MaxHeight绑定到容器高度

来自分类Dev

XAML将String <List>或String []绑定到<Image>

来自分类Dev

将WPF xaml绑定到ViewModel而不构造它

来自分类Dev

如何将 XAML contentView 绑定到其背后的代码

来自分类Dev

使用 ElementName 将 XAML 元素绑定到 UserControl

来自分类Dev

如何将XAML元素作为全局变量绑定到App.XAML.CS?

来自分类Dev

将核心数据文件保存在应用程序的“ Library”目录中

Related 相关文章

  1. 1

    XAML:将FontSize绑定到控件的高度

  2. 2

    将位图绑定到XAML

  3. 3

    XAML将控件属性绑定到指定的样式

  4. 4

    从ViewModel正确设计将数据绑定到视图中的XAML控件的设计

  5. 5

    是将数据从mvvm概念绑定到xaml的权利

  6. 6

    使用Visual Studio安装程序项目将文件安装到每个用户“应用程序数据文件夹”

  7. 7

    将XAML图像保存到Metro应用程序的文件中

  8. 8

    XAML 将列表转换为控件列表

  9. 9

    如何将应用程序资源添加到应用程序的C#后端而不是XAML文件中?

  10. 10

    将字符串与绑定XAML连接

  11. 11

    将数据绑定到Windows 8应用程序的ListView

  12. 12

    将XAML页面集成到Storyboard中

  13. 13

    如何将修改后的属性绑定到控件Windows Universal Apps(XAML / C#)

  14. 14

    将颜色属性从XAML绑定到C#

  15. 15

    将XAML中的字体真棒字符绑定到文本

  16. 16

    如何使用XAML将DataGrid绑定到CollectionViewSource

  17. 17

    Xamarin Xaml将按钮的高度绑定到Label的高度

  18. 18

    将列表框绑定到XAML中的SelectionChanged ComboBox

  19. 19

    如何将itemSource绑定到XAML中的列表

  20. 20

    如何将GridView绑定到XAML中的视频列表?

  21. 21

    将根属性绑定到XAML中子元素的值

  22. 22

    将高度/宽度绑定到XAML中的子元素

  23. 23

    将XAML TreeView MaxHeight绑定到容器高度

  24. 24

    XAML将String <List>或String []绑定到<Image>

  25. 25

    将WPF xaml绑定到ViewModel而不构造它

  26. 26

    如何将 XAML contentView 绑定到其背后的代码

  27. 27

    使用 ElementName 将 XAML 元素绑定到 UserControl

  28. 28

    如何将XAML元素作为全局变量绑定到App.XAML.CS?

  29. 29

    将核心数据文件保存在应用程序的“ Library”目录中

热门标签

归档