WP8 linq-to-sql绑定问题上的LongListSelector
我正在构建我的第一个WP8应用程序,通过linq-to-sql连接到数据库,我想在LongListSelector中显示数据。 但是在Emulator中启动后没有任何东西出现在黑屏上。
请问哪里弄错了? 我用WCF连接
这是MainPage.xaml.cs
using PhoneApp1.Resources; using PhoneApp1.ToursServiceReference1; namespace PhoneApp1 { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); // Sample code to localize the ApplicationBar //BuildLocalizedApplicationBar(); } private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { ToursServiceReference1.ToursService1Client serviceClient = new ToursServiceReference1.ToursService1Client(); serviceClient.GetAllKlientsCompleted += new EventHandler(serviceClient_GetAllKlientsCompleted); serviceClient.GetAllKlientsAsync(); } private void serviceClient_GetAllKlientsCompleted(object sender, ToursServiceReference1.GetAllKlientsCompletedEventArgs e) { if (e.Result != null) { LLS.ItemsSource = e.Result; } }
Ť
这是MainPage.xaml
<!---->
很抱歉提供大型代码,但到目前为止我不知道错误可能是我发布的完整代码。
谢谢大家的时间。
编辑 :Woops,对不起,我没有看到你正在使用WCF,因为我认为WebAPI在这里会好的(关于你的问题到web api并在这里引用你的问题)。 但也许您不需要坚持使用WCF并可以使用其他技术?
Marek,请再次查看https://stackoverflow.com/a/18271995/959687 ,了解基础知识。 我正在编写以下代码,因此可能需要在之后进行改进。 但它会告诉你它是如何基本完成的。
我将向您展示如何使用Web服务中的项填充LongListSelector。
首先,我们需要我们的数据传输对象(DTO):
[JsonObject] public class ListDTO { [JsonProperty] public IEnumerable Items { get; set; } }
然后你需要一个控制器:
public class ListController : ApiController { [HttpGet] public ListDTO Get() { return new ListDTO() { Items = new List() { "Item 1", "Item 2", }, }; } }
然后,您需要从应用中的服务中检索这些项目:
private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { LoadFromWebservice(); } private async void LoadFromWebservice() { HttpClient client = new HttpClient(); client.BaseAddress = new Uri("http://thewebservice.tld/"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); await client.GetStreamAsync("api/list/get") .ContinueWith(result => { var stream = result.Result; var serializer = new JsonSerializer(); // this is json.net serializer using (var streamReader = new StreamReader(stream)) { using (var jsonReader = new JsonTextReader(streamReader)) { var theList = serializer.Deserialize(jsonReader); Dispatcher.BeginInvoke(() => LLS.ItemsSource = theList.Items.ToList()); } } }); }
您现在可以使用数据库中的ling-to-sql在控制器中检索项目。 无论你想要什么,随意做。 🙂
但要注意:我不建议这样做,因为它太多地耦合到您的用户界面。 此示例显示了从Web服务获取数据的基本知识。
我建议你看一下MVVM模式( http://en.wikipedia.org/wiki/Model_View_ViewModel ),构建一个viewmodel并将你的视图绑定到那个viewmodel。 一种方法是使用MVVM灯: http : //mvvmlight.codeplex.com/
附加信息
- 如果您想在本地计算机上进行测试,请查看此处: http : //msdn.microsoft.com/en-us/library/windowsphone/develop/jj684580%28v=vs.105%29.aspx
- 要使用httpclient,您需要从NuGet安装该软件包
- 要部署解决方案,以便每个人都可以访问它,您需要一个运行.NET 4.5的网站空间,创建一个部署包( http://msdn.microsoft.com/en-us/library/dd465323.aspx )并上传它到你的服务器
- 要访问MS SQL数据库,可以使用ling-to-sql,entity framework或.NET支持的任何其他内容。