如何填充文本框-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。
编译器专门骂你
- 说 e.Paramenter(TextChangedEventArgs 没有 "Parameter" 成员)
- 用于使用 "data",由于 1.
而未定义
但是,我推荐一种完全不同的方法。只需使用列表视图(和数据绑定)。
示例:
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));
}
}
}
我想做的基本上是当 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。
编译器专门骂你
- 说 e.Paramenter(TextChangedEventArgs 没有 "Parameter" 成员)
- 用于使用 "data",由于 1. 而未定义
但是,我推荐一种完全不同的方法。只需使用列表视图(和数据绑定)。
示例:
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));
}
}
}