0

您好我正在尝试研究 windows phone 中的数据绑定属性。我用谷歌搜索了一些博客。从这些博客中了解到,我在 ListBox 中绑定了值。现在列表框显示了许多具有名称、数量、日期、图像属性的产品。但是现在我正在尝试这样做,如果单击列表中的任何产品,我想导航到其他页面并在那里显示产品详细信息。但是在该页面中,数据绑定不起作用。只是那些文本块什么也没显示。我在下面包含了我的代码。请帮助我在我的代码中找到问题。

事务.cs

public class Transaction
{
    public String Name { get; set; }
    public String Date { get; set; }
    public int Amount { get; set; }
    public String Type { get; set; }

    public Transaction(String name, String date, int amount,String type)
    {
        this.Name = name;
        this.Date = date;
        this.Amount = amount;
        this.Type = type;
    }
}

public class ShowItem 
{
    public String SelectedItemName { get; set; }
    public String SelectedItemImage { get; set; }
    public String SelectedItemDate { get; set; }
    public String SelectedItemAmount { get; set; }

    public ShowItem(String name, String date, String amount, String image)
    {
        this.SelectedItemName = name;
        this.SelectedItemDate = date;
        this.SelectedItemAmount = amount;
        this.SelectedItemImage = image;
    }
}

主页.xaml

<Grid  Height="530" Grid.Row="1" VerticalAlignment="Top" Margin="0,30,0,0">
            <ListBox Margin="0,0,0,0" Name="TransactionList">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Button  Width="460" Height="150" BorderThickness="0" Click="user_click" Name="rowButton" Background="{Binding Color}" >
                            <Button.Content>
                                <StackPanel Orientation="Horizontal" Height="auto" Width="400">
                                    <Image Width="80" Height="80" Source="{Binding Type}"></Image>
                                    <StackPanel Orientation="Vertical" Height="150" Margin="20,0,0,0">
                                        <StackPanel Orientation="Horizontal" Height="40">
                                            <TextBlock Width="100" FontSize="22" Text="Name :" Height="40" ></TextBlock>
                                            <TextBlock Width="auto" FontSize="22" Text="{Binding Name}" Height="40" ></TextBlock>
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Height="40">
                                            <TextBlock Width="100" FontSize="22" Text="Date :" Height="40" ></TextBlock>
                                            <TextBlock Width="100" FontSize="22" Text="{Binding Date}" Height="40" ></TextBlock>
                                        </StackPanel>
                                        <StackPanel Orientation="Horizontal" Height="40">
                                            <TextBlock Width="100" FontSize="22" Text="Amount :" Height="40" ></TextBlock>
                                            <TextBlock Width="auto" FontSize="22" Text="{Binding Amount}" Height="40" ></TextBlock>
                                            <TextBlock Width="auto" FontSize="22" Text=" $" Height="40" ></TextBlock>
                                        </StackPanel>
                                    </StackPanel>
                                </StackPanel>
                            </Button.Content>
                        </Button>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </Grid>

MainPage.xaml.cs

public partial class MainPage : PhoneApplicationPage
{
    string[] _dates = { "19/9/1984", "25/8/1952", "27/5/1992", "4/8/1975", "10/3/2000", "22/1/2002", "23/5/2012", "25/9/1963", "13/7/1999", "15/4/1936" };

string[] _imageList = { "69290979.png", "acrobat-reader-cs-4.png","azureus-1.png","ClothDolls_lnx-Icons-Colored_Blue_Doll_256x256.png-256x256.png","database-27.png",
                          "documents-folder-2.png", "Front_Row_Icon.png","gear-8.png","info-chat.png","itunes-6.png","nero-smart-start-1.png",
                          "network-2.png","picasa.png","quicktime-7-red.png","twitter-bird.png","wlm-1.png" };


    string[] _items = { "Television", "Radio", "Fridge", "Fan", "Light", "Cup", "Plate", "Dress", "Laptop", "Mobile" };
    int[] _prices = { 10, 15, 20, 25, 30, 5, 8, 15, 10, 20 };

    List<Transaction> transactionList;

    // Constructor
    public MainPage()
    {
        InitializeComponent();

        Loaded += new RoutedEventHandler(MainPage_Loaded);
    }

 void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        int count = 50;
        String DefaultName = "";
        String DefaultDate = "";
        int DefaultAmount = 0;
        String DefaultImage = "";
        transactionList = new List<Transaction>();
        Random random = new Random();

        for (int i = 0; i < _items.Length; i++)
        {
            DefaultName = _items[i];
            DefaultDate = _dates[i];
            DefaultAmount = _prices[i];
            DefaultImage = "Images/" + _imageList[random.Next(0, _imageList.Length)];

            transactionList.Add(new Transaction(DefaultName, DefaultDate, DefaultAmount, DefaultImage));
        } 

        TransactionList.ItemsSource = transactionList;
   }

    private void user_click(object sender, RoutedEventArgs e)
    {
        var myData = ((Button)sender).DataContext as Transaction;
        NavigationService.Navigate(new Uri("/DisplayProduct.xaml?Name=" + myData.Name +"&Date=" + myData.Date + "&Amount=" + myData.Amount + "&Type=" + myData.Type, UriKind.Relative));
    }

}

显示产品.xaml

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
        <StackPanel Orientation="Vertical">
            <StackPanel HorizontalAlignment="Center">
                <Image Width="auto" Height="auto" Name="itemImage" Source="{Binding SelectedItemImage}"></Image>
            </StackPanel>
            <StackPanel Orientation="Horizontal">
                <StackPanel Orientation="Vertical" Width="350" HorizontalAlignment="Left">
                    <StackPanel Orientation="Horizontal" Margin="0,20,0,0">
                        <TextBlock Text="Name : " Width="150" Height="70" FontSize="35"  Foreground="DarkSalmon"></TextBlock>
                        <TextBlock Name="itemName" Text="{Binding SelectedItemName}" Width="auto" Height="70" FontSize="35"></TextBlock>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="0,20,0,0">
                        <TextBlock Text="Amount : " Width="150" Height="70" FontSize="35" Foreground="DarkSalmon"></TextBlock>
                        <TextBlock Name="itemPrice" Text="{Binding SelectedItemAmount}" Width="auto" Height="70" FontSize="35"></TextBlock>
                        <TextBlock Name="currency" Text="$" Width="auto" Height="70" FontSize="35"></TextBlock>
                    </StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="0,20,0,0">
                        <TextBlock Text="Date : " Width="150" Height="70" FontSize="35" Foreground="DarkSalmon"></TextBlock>
                        <TextBlock Name="itemDate" Text="{Binding SelectedItemDate}" Width="auto" Height="70" FontSize="35"></TextBlock>
                    </StackPanel>
                </StackPanel>
            </StackPanel>
        </StackPanel>
    </Grid>

DisplayProduct.xaml.cs

public partial class DisplayProduct : PhoneApplicationPage
{
    public DisplayProduct()
    {
        InitializeComponent();
        Loaded += new RoutedEventHandler(DisplayProduct_Loaded);
    }

    void DisplayProduct_Loaded(object sender, RoutedEventArgs e)
    {
        string name = NavigationContext.QueryString["Name"];
        string date = NavigationContext.QueryString["Date"];
        string amount = NavigationContext.QueryString["Amount"];
        string type = NavigationContext.QueryString["Type"];

        ShowItem showItemClass = new ShowItem(name, date, amount, type);
    }

}
4

1 回答 1

2
void DisplayProduct_Loaded(object sender, RoutedEventArgs e)
{
    string name = NavigationContext.QueryString["Name"];
    string date = NavigationContext.QueryString["Date"];
    string amount = NavigationContext.QueryString["Amount"];
    string type = NavigationContext.QueryString["Type"];

    ShowItem showItemClass = new ShowItem(name, date, amount, type);
    DataContext = showItemClass;
}

您忘记设置页面的DataContext。它不知道应该从哪里获取要显示的数据。

于 2012-09-25T07:47:38.667 回答