如何更新Windows Phone 8中第2页的第1页按钮内容

时间:2013-07-02 12:15:21

标签: windows-phone-7 listbox windows-phone-8

我有两页。 i)主页 - 其中包含一个显示用户所选城市的按钮(来自德里的defalut) ii)ListPage - 哪个包含列表框(此处显示所有城市)

因此,当用户点击HomePage中的按钮时,我将导航到ListPage以选择城市。 当用户点击列表中的任何城市时,我必须关闭该ListPage,然后立即将所选城市更新为主页中按钮的内容。

请帮我完成上述任务。

4 个答案:

答案 0 :(得分:0)

如果您使用“MVVM Light”库,那么您可以使用Messenger服务,就像这样....

选择后第二页中的

发送消息

Messenger.Default.Send<type>(message,token);

然后在第1页viewmodel

的consructor中
Messenger.Default.Register<type>(this,token,Method);

此处令牌应与发件人令牌相同....

然后

void Method(type message)
{
  button.content = message;
}

答案 1 :(得分:0)

基本方法是实现PropertyChanged订阅。

//In your HomePage class
HomePage()
{
    ListPage.PropertyChanged +=this.CitySelected //Subscribe to the property changed event
}

void CitySelected(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "NewCity")
    {
        City selectedCity= (sender as ListPage).NewCity;
    }
}

//In your ListPage class
//You should implement INotifyPropertyChanged interface:

ListPage:INotifyPropertyChanged

private city newCity;
public City NewCity
{
get{return newCity;}
set{
    newCity=value;
    NotifyChange("NewCity");
}
}

void CitySelected(City selected)
{
    NewCity=selected;
}

public event PropertyChangedEventHandler PropertyChanged;

public delegate void PropertyChangeHandler(object sender, EventArgs data);

protected void NotifyChange(string args)
{
    if (PropertyChanged != null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(args));
    }
}

答案 2 :(得分:0)

我建议您更改工作流程以使用Windows Phone Toolkit ListPicker控件。此控件与您在手机的“设置”应用中看到的样式相匹配。 ListPicker允许用户点击所选项目并导航到另一个页面,该页面为他们提供可用选项列表。这是一个例子

<StackPanel>
    <TextBlock Text="City"/>
    <toolkit:ListPicker ExpansionMode="FullScreenOnly"
                        FullModeHeader="CITY"
                        ItemsSource="{Binding Cities}"
                        SelectedItem="{Binding SelectedCity}">
        <toolkit:ListPicker.FullModeItemTemplate>
            <DataTemplate>
                <TextBlock Margin="0,20" Text="{Binding Name}" TextWrapping="Wrap"/>
            </DataTemplate>
        </toolkit:ListPicker.FullModeItemTemplate>
    </toolkit:ListPicker>
</StackPanel>

您的DataContext看起来像

public class ViewModel : INotifyPropertyChanged
{
    public ViewModel()
    {
       Cities = new List<City> { new City("Denver"), new City("New York") };
    }

    public City SelectedCity 
    {
        { get return _city; }
        { _city = value; OnpropertyChanged("SelectedCity"); }
    }
    public IEnumerable<City> Cities { get; private set; }
}

答案 3 :(得分:0)

这将非常简单。您需要做的是,使用NavigationService.Navigate(),然后将所选城市与HomePage页面uri一起追加,并在HomePage页面中,使用NavigationContext.QueryString.TryGetValue()检索所选城市,并在您的内容中指定值按钮。

对于前,

在ListPage.cs中,

NavigationService.Navigate(new Uri("/HomePage.xaml?selectedCity=" + "Coimbatore", UriKind.Relative));

在您的HomePage.cs中,

string selectedCity = "";
NavigationContext.QueryString.TryGetValue("selectedCity", out selectedCity);
button.Content = selectedCity;

由于