如何填充文本框-Windows Phone 8.1

How to populate textboxes-Windows Phone 8.1

我想做的基本上是当 select 从另一个 xaml(菜单)中输入项目时,用一个 xaml(篮子)中的项目名称填充文本框。我的代码如下:

Menu.xaml

在这里,当我单击一个按钮时,我希望它自动出现在 Basket.xaml 的文本框中。

    public class PassedData
    {
        public string Name { get; set; }
        public int Value { get; set; }
    }
    private void Vanbtn_Click(object sender, RoutedEventArgs e)
    {


        Frame.Navigate(typeof(Basket), new PassedData { Name = "Cheese" });
    }

    private void LCbtn_Click(object sender, RoutedEventArgs e)
    {
        Frame.Navigate(typeof(Basket), new PassedData { Name = "Crisp" });
    }

Basket.xaml

       protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        Menu.PassedData data = e.Parameter as Menu.PassedData;
    /**    ItemChosentxt.Text = data.Name;
        ItemChosentxt2.Text = data.Name;
        ItemChosentxt3.Text = data.Name;
        ItemChosentxt4.Text = data.Name;**/


    }

注释掉的部分添加了项目的名称selected。它不是只添加到一个文本框,而是添加到所有文本框。即,如果我 select Menu.xaml 中的香草 btn,则名称会出现在所有 4 个文本框中,而不仅仅是一个。所以我决定在每个文本框中实现代码:

private void ItemChosentxt_TextChanged(object sender, TextChangedEventArgs e)
    {
        Menu.PassedData data = e.Parameter as Menu.PassedData;
        ItemChosentxt.Text = data.Name;
    }

    private void SecItem_TextChanged(object sender, TextChangedEventArgs e)
    {
        Menu.PassedData data = e.Parameter as Menu.PassedData;
        SecItem.Text = data.Name;
    }

这会在 e.Parameter 下方显示一个错误,错误代码是 -

Severity    Code    Description Project File    Line    Suppression State
    Error   CS0103  The name 'data' does not exist in the current context    

    Severity    Code    Description Project File    Line    Suppression State
Error   CS1061  'TextChangedEventArgs' does not contain a definition for 'Parameter' and no extension method 'Parameter' accepting a first argument of type 'TextChangedEventArgs' could be found (are you missing a using directive or an assembly reference?) 

我正在开发一个购物应用程序,例如如果菜单中的用户 selects "Vanilla" 和 "Cake" 如何使名称显示在篮子文本框中?我是应用程序开发的新手,对于这么长的问题深表歉意。

问题是您没有为 TextChangedEventArgs 提供 PassedData。

编译器专门骂你

  1. 说 e.Paramenter(TextChangedEventArgs 没有 "Parameter" 成员)
  2. 用于使用 "data",由于 1.
  3. 而未定义


但是,我推荐一种完全不同的方法。只需使用列表视图(和数据绑定)。
示例:

Basket.xaml

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView ItemsSource="{Binding PassedData}" HorizontalAlignment="Center" VerticalAlignment="Center">
        <ListView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition Width="auto"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="auto"/>
                    </Grid.RowDefinitions>
                    <TextBox Grid.Column="0" Text="{Binding Name}" />
                    <TextBox Grid.Column="1" Text="{Binding Value}" />
                </Grid>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</Grid>

Basket.xaml.cs

using System.Collections.ObjectModel;
using System.ComponentModel;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;

    // namespace ...

public sealed partial class Basket : Page
{
    private static ObservableCollection<Menu.PassedData> passedData = new ObservableCollection<Menu.PassedData>();
    public ObservableCollection<Menu.PassedData> PassedData
    {
        get { return passedData; }
        set { passedData = value; }
    }


    /*Events*/

    public event PropertyChangedEventHandler PropertyChanged;

    /*Methods*/

    /// Fires PropertyChangedEventHandler, for bindables
    protected void OnPropertyChanged(string name)
    {
        var ev = PropertyChanged;
        if (ev != null)
        {
            ev(this, new PropertyChangedEventArgs(name));
        }
    }

    public Basket()
    {
        this.InitializeComponent();
        this.DataContext = this;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        Menu.PassedData data = e.Parameter as Menu.PassedData;
        /**    ItemChosentxt.Text = data.Name;
            ItemChosentxt2.Text = data.Name;
            ItemChosentxt3.Text = data.Name;
            ItemChosentxt4.Text = data.Name;**/
        if (data != null)
        {
            PassedData.Add(data);
        }

    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        Frame.Navigate(typeof(Menu));
    }
}

}