gpt4 book ai didi

json - 如何将数据绑定(bind)到 Xaml、Windows Phone?

转载 作者:行者123 更新时间:2023-12-04 12:54:12 26 4
gpt4 key购买 nike

这是我的 C# 代码,现在它在控制台中显示数据。

class PlaceViewModel
{

public List<Vantaa.IntroPage.Place> Places;
}

public class Place
{
public string id { get; set; }
public string title { get; set; }
public string latitude { get; set; }
public string longitude { get; set; }
public string www { get; set; }
}

public class RootObject
{
public List<Place> Places { get; set; }
}

protected override void OnNavigatedTo(NavigationEventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
webClient.DownloadStringAsync(new Uri("http://mobiilivantaa.lightscreenmedia.com/api/place"));
}

private void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
var rootObject = JsonConvert.DeserializeObject<RootObject>(e.Result);

foreach (var book in rootObject.Places)
{
System.Diagnostics.Debug.WriteLine(book.id);
}
this.DataContext = new PlaceViewModel
{
Places = rootObject.Places
};
}

我应该如何处理 xaml 文件才能在文本 block 中显示数据?

这是我当前的 xaml 代码。这肯定是行不通的。我真的不知道。

<ListBox ItemsSource="{Binding Places}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=id}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

最佳答案

您的类代码看起来不错,所以现在只需将结果绑定(bind)到 View 即可。您要返回一个对象列表,因此您应该使用支持显示多个项目的控件。当然,您可以将所有书籍的 ID 连接成一个字符串并将其显示在标签中。但事实并非如此。您应该做的是向 XAML 添加一个 ListBox 控件并在其中创建一个 DataTemplate。这样您就可以设置项目的显示方式。

创建一个类作为您的 XAML 页面的 ViewModel。此类将具有属性“Places”(类型:List<Place>)。在获取所有数据完成后的 OnNavigatedTo 事件中,填充 ViewModel 并将其绑定(bind)到 XAML 的 DataContext:

this.DataContext = new YourViewModel { Places = rootObject.Places };

这样您就可以从 XAML 中的 ViewModel 获取所有对象:

<ListBox ItemsSource="{Binding Places}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Path=id}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

编辑:

这是一个工作示例:

XAML:

<Grid>
<ListBox ItemsSource="{Binding Places}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=ID}" />
<TextBlock Text="{Binding Path=Title}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>

Place.cs:

public class Place
{
public string ID { get; set; }
public string Title { get; set; }
public string Latitude { get; set; }
public string Longitude { get; set; }
public string Web { get; set; }
}

MainViewModel.cs:

public class MainViewModel
{
public MainViewModel()
{
Places = new List<Place>();
}

public List<Place> Places { get; set; }
}

示例存储库(您应该拥有自己的存储库):

public static List<Place> FetchData()
{
var lst = new List<Place>();

lst.Add(new Place { ID = "1", Title = "One", Latitude = "111", Longitude = "111", Web = "www......" });
lst.Add(new Place { ID = "2", Title = "Two", Latitude = "222", Longitude = "222", Web = "www......" });
lst.Add(new Place { ID = "3", Title = "Three", Latitude = "333", Longitude = "333", Web = "www......" });
lst.Add(new Place { ID = "4", Title = "Four", Latitude = "444", Longitude = "444", Web = "www......" });

return lst;
}

MainWindow.xaml.cs:

public MainWindow()
{
InitializeComponent();
//This is where the magic happens
//Fill the viewModel with the data
var viewModel = new MainViewModel { Places = Repository.FetchData() };
//Assign the viewModel with the data to the DataContext
//The bindings will be automatically done in the XAML
DataContext = viewModel;
}

关于json - 如何将数据绑定(bind)到 Xaml、Windows Phone?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14153659/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com