无法使用按钮在窗口电话应用中检索数据

时间:2014-12-11 15:13:59

标签: c# wpf xaml windows-phone-8 asynchronous

您刚开始使用Window Phone应用,我不知道如何检索要链接到textblock的数据 我正在使用一个透视应用程序,我需要将它保存到3个文本框并显示在"所有"

MainPage.xaml中

  <phone:Pivot Title="MY APPLICATION">

  <phone:PivotItem Header="All" Margin="10,0,14,32">



  <Canvas>

  <TextBlock TextWrapping="Wrap" Text="Admin : " Canvas.Left="57" Canvas.Top="125"/>
  <TextBlock TextWrapping="Wrap" Canvas.Left="57" Canvas.Top="201" Width="73">
  <Run Text="Name:"/>
  <LineBreak/>
                        <Run/>
                </TextBlock>
                <Button Content="Retrieve " Canvas.Left="165" Canvas.Top="484" Click="Btn_Retrieve"/>
                <TextBlock x:Name="Valuespace" TextWrapping="Wrap" Canvas.Left="152" Canvas.Top="125" Height="110" Width="170"/>
            </Canvas>


        </phone:PivotItem>

        <!--Pivot item two-->
        <phone:PivotItem Header="Admin">
            <!--Double line list no text wrapping-->
            <Canvas>
                <TextBox Name="TbAdmin" Height="69" TextWrapping="Wrap" Width="296" Canvas.Top="151" Canvas.Left="78"/>
                <Button Content="Save" Canvas.Left="152" Canvas.Top="344" Height="76" Width="143" Click="btn_Save"/>

            </Canvas>
        </phone:PivotItem>

        <phone:PivotItem Header="Name" Margin="14,0,10,28">
            <!--Double line list no text wrapping-->
            <Canvas>
                <TextBox Name="TbName" Height="69" TextWrapping="Wrap" Width="296" Canvas.Top="151" Canvas.Left="78"/>
                <Button Content="Save" Height="76" Width="159" Canvas.Left="143" Canvas.Top="290" Click="btn_Save"/>

            </Canvas>
        </phone:PivotItem>

        <phone:PivotItem Header="Update">
            <!--Double line list no text wrapping-->
            <Canvas>
                <TextBox Name="TbUpdate" Height="69" TextWrapping="Wrap" Width="296" Canvas.Top="151" Canvas.Left="78"/>
                <Button Content="Save" Canvas.Left="161" Canvas.Top="325" Height="91" Width="140" Click="btn_Save"/>

            </Canvas>
        </phone:PivotItem>
    </phone:Pivot>


</Grid>

MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using MockTest.Resources;
using System.IO;
using System.Threading.Tasks;
using Windows.Storage;

namespace MockTest
{
public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    public MainPage()
    {
        InitializeComponent();

        // Set the data context of the listbox control to the sample data
        DataContext = App.ViewModel;

        // Sample code to localize the ApplicationBar
        //BuildLocalizedApplicationBar();
    }

    // Load data for the ViewModel Items
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (!App.ViewModel.IsDataLoaded)
        {
            App.ViewModel.LoadData();
        }
    }

    async void btn_Save(object sender, RoutedEventArgs e)
    {
        var folder = ApplicationData.Current.LocalFolder;
        var file = await folder.CreateFileAsync("Store.txt",       
    CreationCollisionOption.ReplaceExisting);

        using (var stream = await file.OpenStreamForWriteAsync())
        {
            var writer = new StreamWriter(stream);
            await writer.WriteLineAsync(TbAdmin.Text);
            await writer.WriteLineAsync(TbName.Text);
            await writer.WriteLineAsync(TbUpdate.Text);
            await writer.FlushAsync();
            writer.Close();
        }
    }

    async void Btn_Retrieve(object sender, RoutedEventArgs e)
    {
        var folder = ApplicationData.Current.LocalFolder;

        using (var Stream = await folder.OpenStreamForReadAsync("Store.txt")) 
        {
            var reader = new StreamReader(Stream);
            var result = await reader.ReadToEndAsync();
            MessageBox.Show(result);
        }

    }

我能够在MessageBox中显示详细信息,但我希望它显示在与admin和Name匹配但不显示更新的文本块中。无论如何都要这样做,因为我真的不知道在异步中写什么。

1 个答案:

答案 0 :(得分:1)

当您去检索数据时,您可能会使用当前代码看到这样的内容。

“管理员\ r \ n名称\ r \ nUpdate \ r \ n” 个

当您将数据保存在三行中时,这些行是逐行存储的。你可以做一些事情,比如将单个长字符串分成单独的行。

var splitBy = new[] { "\r\n" };
var splitResult = result.Split(splitBy, StringSplitOptions.RemoveEmptyEntries);

然后,当您以三行为一组输入数据时,每个文本框都有一行。您只需循环浏览 splitResults 并一次抓取三个项目。

然后您可以使用某些内容......

TextBlock.Text = string1;

我会立即将重点放在异步上,并首先将数据输入 TextBlock

我还看到你正在添加一个换行符并在文本块中使用run。也许现在可以远离它,并添加另一个文本块,将保留返回的管理员&amp;名称。因为这将导致您使用内联,这是另一种学习曲线。

所以在 TextBlock 下你有这样的东西......

<TextBlock TextWrapping="Wrap" Text="Admin : " Canvas.Left="57" Canvas.Top="125"/>

在其下方放置另一个文本块,并将其命名为您想要的内容。然后在后面的代码中,您可以通过它的名称访问 TextBlock 并直接设置它的文本。

我还要从字符串拆分中删除空条目,如果您输入空字符串等,则需要考虑这些条目。