2

FirstName、LastName、EmailAddress などのユーザー オブジェクトを返す Web サービスがあり、Web サービスからのオブジェクトをアプリ コントロールにバインドする必要がある Windows 8 ストア アプリを構築しています。Web サービスを呼び出すことができ、期待どおりの User オブジェクトに値が返されます。情報を Windows 8 Store アプリケーション コントロールにバインドする方法がわかりません。私の最初の試みは、名を txtUserName という TextBlock にバインドすることです。

テキストブロックが含まれているグリッドの XAML は次のとおりです。

<Grid x:Name="MainMenuGrid">
            <Grid.DataContext>
                <local:CurrentUserDataSource/>
            </Grid.DataContext>
            <Grid.RowDefinitions>
                <RowDefinition Height="100"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <TextBlock TextWrapping="Wrap" Text="Welcome to Cuisinier Creatif"     VerticalAlignment="Center" FontSize="64" Margin="5" HorizontalAlignment="Center"/>
            <VariableSizedWrapGrid HorizontalChildrenAlignment="Stretch" ItemHeight="195" ItemWidth="200" MaximumRowsOrColumns="2" Orientation="Vertical" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center">
                <Button x:Name="btnMyRecipeBooks"  Content="My Reipie Books" Width="200" HorizontalAlignment="Stretch" Height="140" Margin="2"/>
                <Button x:Name="btnewRecipeBook"  Content="New Recipe Book" Width="200" HorizontalAlignment="Stretch" Height="140" Margin="2"/>
                <Button x:Name="btnMyRecipes"  Content="My Reipies" Width="200" HorizontalAlignment="Stretch" Height="140" Margin="2"/>
                <Button x:Name="btnNewRecipe"  Content="New Recipe" Width="200" HorizontalAlignment="Stretch" Height="140" Margin="2"/>
                <Button x:Name="btnShoppingList"  Content="Shopping List" Width="200" HorizontalAlignment="Stretch" Height="140" Margin="2"/>
                <Button x:Name="btnMyInformation"  Content="My Information" Width="200" HorizontalAlignment="Stretch" Height="140" Margin="2" />
            </VariableSizedWrapGrid>
            <TextBlock x:Name="txtUserName" TextWrapping="Wrap" Text="{Binding ThisUser[0].FirstName}" VerticalAlignment="Center" FontSize="64" HorizontalAlignment="Left" Margin="5"  Width="50" Height="150"/>
        </Grid>

クラス CurrentUserDataSource クラス:

class CurrentUserDataSource
{
   public CurrentUserDataSource()
   {
   }
   public CurrentUserDataSource(User user)
   {
        LoadUser(user);
   }
   private ObservableCollection<CurrentUser> currentUser;

    public ObservableCollection<CurrentUser> ThisUser
    {
        get { return currentUser; }
        set { currentUser = value; }
    }
    private void LoadUser(User user)
    {
       currentUser = new ObservableCollection<CurrentUser>
        {
            new CurrentUser
            {
                FirstName = user.FirstName,
                LastName = user.LastName,
                EmailAddress = user.LastName,
                LastSignIn = user.LastSignIn,
                SignUpdate = user.SignUpdate
            }
        };
    }
}

現在のユーザー クラス:

class CurrentUser:INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private string _firstname;
        private string _lastname;
        private DateTime _lastsignin;
        private DateTime _signupdate;
        private string _emailaddress;

        public CurrentUser()
        {

        }
        public CurrentUser(User user)
        {
            this.FirstName = user.FirstName;
            this.LastName = user.LastName;
            this.LastSignIn = user.LastSignIn;
            this.SignUpdate = user.SignUpdate;
            this.EmailAddress = user.EmailAddress;
        }
        private void NotifyPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }
        public string FirstName
        {
            get { return this._firstname; }
            set
            {
                _firstname = value;
                NotifyPropertyChanged("FirstName");
            }
        }
    }
}

ページ上のコード ビハインド:

public sealed partial class MainMenu : Page
    {
        User usr = new User();
        public MainMenu()
        {
            this.InitializeComponent();

        }

        /// <summary>
        /// Invoked when this page is about to be displayed in a Frame.
        /// </summary>
        /// <param name="e">Event data that describes how this page was reached.  The Parameter
        /// property is typically used to configure the page.</param>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            usr = (User)e.Parameter;
            CurrentUserDataSource cuDS = new CurrentUserDataSource(usr);

        }
    }

明らかな何かが欠けていると思います。いくつかのチュートリアルを実行しましたが、不足しているものを見つけることができません。

4

1 に答える 1

0

ユーザーをオブジェクトとして渡す必要があるため、コードビハインドでデータバインディングを行う必要があることがわかりました。

user = (User)e.Parameter;
            CurrentUserDataSource cuDS = new CurrentUserDataSource(user);
            MainMenuGrid.DataContext = cuDS;

http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/cbb3bed3-c883-40ff-b2aa-5b2aacb4bf27/から

于 2012-11-09T02:54:51.980 に答える