Windows phone 7 如何在windows phone 8中从第2页更新第1页按钮的内容

Windows phone 7 如何在windows phone 8中从第2页更新第1页按钮的内容,windows-phone-7,listbox,windows-phone-8,Windows Phone 7,Listbox,Windows Phone 8,我有两页。 i主页-其中包含一个按钮,显示用户选择的城市德法卢特德里 ii ListPage-其中包含此处显示的所有城市的列表框 所以,当用户单击主页中的按钮时,我将导航到ListPage以选择城市。 当用户单击列表中的任何城市时,我必须关闭该列表页面,然后立即将所选城市更新为主页中按钮的内容 请帮助我如何完成上述任务。如果您使用的是MVVM Light library,那么您可以像这样使用Messenger service 在选择更改后的第二页中发送消息 Messenger.Default.S

我有两页。 i主页-其中包含一个按钮,显示用户选择的城市德法卢特德里 ii ListPage-其中包含此处显示的所有城市的列表框

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


请帮助我如何完成上述任务。

如果您使用的是MVVM Light library,那么您可以像这样使用Messenger service

在选择更改后的第二页中发送消息

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

基本方法是实现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));
    }
}

我建议您更改工作流以使用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; }
}

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

例如

在您的ListPage.cs中

NavigationService.Navigate(new Uri("/HomePage.xaml?selectedCity=" + "Coimbatore", UriKind.Relative));
在你的主页.cs中

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

NavigationService.Navigate(new Uri("/HomePage.xaml?selectedCity=" + "Coimbatore", UriKind.Relative));
string selectedCity = "";
NavigationContext.QueryString.TryGetValue("selectedCity", out selectedCity);
button.Content = selectedCity;