UWP C#-控件的数据绑定和更新

UWP C#-控件的数据绑定和更新,c#,uwp,C#,Uwp,让我先说一句,我正在写我的第一个UWP应用程序。此应用程序将从服务器中提取一些JSON值并聚合结果。我想让用户能够添加和删除服务器。我使用社区Tookkit中的LocalObjectStorageHelper将信息存储在应用程序数据文件夹中。下面是处理以下内容的类: class ServerSettingsStore { LocalObjectStorageHelper helper = new LocalObjectStorageHelper(); private strin

让我先说一句,我正在写我的第一个UWP应用程序。此应用程序将从服务器中提取一些JSON值并聚合结果。我想让用户能够添加和删除服务器。我使用社区Tookkit中的LocalObjectStorageHelper将信息存储在应用程序数据文件夹中。下面是处理以下内容的类:

class ServerSettingsStore
{

    LocalObjectStorageHelper helper = new LocalObjectStorageHelper();
    private string serverNumber;

    public ServerSettingsStore(string serverNum)
    {
        serverNumber = serverNum;

    }

    public void Save_Settings(ServerInfo serverInfo)
    {

        helper.Save(serverNumber, serverInfo);

    }

    public ServerInfo Retrive_Settings()
    {
        var result = helper.Read<ServerInfo>(serverNumber);

        return result;

    }
现在,在UWP页面上,我成功地将数据绑定到列表框:

XAML代码:

<ListBox x:Name="ServerList" ItemsSource="{x:Bind ViewModel.ServerList, Mode=OneWay}" SelectionChanged="ServerList_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate x:DataType="local:ServerInfo">
                            <StackPanel Orientation="Horizontal">
                                <StackPanel>
                            <TextBlock Text="{x:Bind ServerName}" FontWeight="Bold"/>
                            <TextBlock Text="{x:Bind ServerAddress}"  Margin="10,0,0,0"/>
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

这是我的ViewModel:

public class ListViewModel
{

    private ObservableCollection<ServerInfo> serverlist = new ObservableCollection<ServerInfo>();
    public ObservableCollection<ServerInfo> ServerList { get { return this.serverlist; } }

    public ListViewModel()
    {

        for (var i = 1; i <= Convert.ToInt32(new ServerCount().NumberOfServers); i++)
        {
            var settingsstore = new SettingsStore(i.ToString());
            var serverinfo = new ServerInfo();
            serverinfo = settingsstore.Retrive_Settings();
            this.serverlist.Add(new ServerInfo() { ServerName = serverinfo.ServerName, ServerAddress = serverinfo.ServerAddress, ServerAuthKey = serverinfo.ServerAuthKey });

        }
        
    }

}
公共类ListViewModel
{
私有ObservableCollection服务器列表=新ObservableCollection();
public observeCollection ServerList{get{返回this.ServerList;}}
公共ListViewModel()
{

对于(var i=1;i,根据注释,当您向
ObjectStorageHelper
写入时,似乎没有将新项添加到
ObservableCollection
属性,因此您的
ListView
没有按预期更新

保存/写入操作成功后,您需要将该项添加到集合中,并且您的
列表视图将正确更新(您共享的xaml片段中的x:bind看起来正常)


现在,与ObjectStorageHelper一起使用的代码似乎位于不同的ViewModel中。我不知道您的代码是如何构造的,但您可以将该代码引入上面的同一个ViewModel中,然后更新ObservableCollection,或者可能使用在成功完成保存操作后触发的事件/通知,然后然后,处理程序会将该项添加到集合中。

因此,一旦有内容写入ObjectStorageHelper,您希望更新listview吗?如果是,您能否显示正在写入ObjectStorageHelper的对象?它是否与上面的视图模型位于同一视图模型中?写入ObjectStorageHelper的类位于与b不同的视图模型中构建列表框。我是否应该将它们合并到同一个类中?如果这样做,则在将某个内容保存到ObjectStorageHelper后,您还可以将该项目添加到ObservableCollection中,从而使ListView显示该项目。主要的一点是,一旦将某个内容保存到ObjectStorageHelper中,您将需要将其添加到ObservableCollection中所以,如果你把它们放在不同的类中,请确保你仍然可以以某种方式同步它们,可能是通过事件/通知,但这取决于你的代码是如何构造的。这是有道理的。我想我对如何重新构造东西以将它们组合在一起有一些想法。谢谢!这正是我的问题。我将重新构造一些代码并谢谢!很高兴听到这个@Pusta
public class ListViewModel
{

    private ObservableCollection<ServerInfo> serverlist = new ObservableCollection<ServerInfo>();
    public ObservableCollection<ServerInfo> ServerList { get { return this.serverlist; } }

    public ListViewModel()
    {

        for (var i = 1; i <= Convert.ToInt32(new ServerCount().NumberOfServers); i++)
        {
            var settingsstore = new SettingsStore(i.ToString());
            var serverinfo = new ServerInfo();
            serverinfo = settingsstore.Retrive_Settings();
            this.serverlist.Add(new ServerInfo() { ServerName = serverinfo.ServerName, ServerAddress = serverinfo.ServerAddress, ServerAuthKey = serverinfo.ServerAuthKey });

        }
        
    }

}