2016-04-08 11 views
-1

私がしようとしているのは、基本的に、別のxaml(メニュー)からアイテムを選択するときに、1つのxaml(バスケット)にアイテム名を入力します。私のコードは以下の通りです:テキストボックスを作成する方法 - Windows Phone 8.1

Menu.xaml

ここでは、私はそれがautomaticallly 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;**/ 


    } 

コメントアウト部分は、選択した項目の名前を追加します。 1つのテキストボックスに追加するだけでなく、すべてのテキストボックスに追加されます。つまり、Menu.xamlでバニラbtnを選択すると、名前は1つではなく4つのテキストボックスすべてに表示されます。 -

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?) 

私が開発しています。これは、エラーコードがあるe.Parameterの下にエラーが表示さ

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; 
    } 

:だから私は、各テキストボックス内のコードを実装することを決定しましたショッピングアプリなどメニューから "バニラ"と "ケーキ"を選択した場合、どのように名前をバスケットのテキストボックスに表示させることができますか?私はアプリの開発に新しいと長い質問をお詫び申し上げます。

答えて

0

問題は、TextChangedEventArgs eにPassedDataを指定していないことです。

コンパイラは、具体的理由1の未定義である「データ」を、使用するための(TextChangedEventArgsは、「パラメータ」メンバーを持っていません)

  • e.Paramenterを言うためにあなた

    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)); 
        } 
    } 
    

    }

  • 関連する問題