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