我有兩個頁面。 我)首頁 - 這包含一個按鈕來顯示用戶所選城市(由defalut德里) II)末頁 - 哪些包含列表框中(所有城市在這裏展示)如何更新Windows Phone 8頁面2中的page1按鈕的內容
所以當用戶單擊主頁上的按鈕,然後我將導航到ListPage以選擇城市。 當用戶點擊列表中的任何城市時,我不得不關閉該ListPage,然後立即將所選城市更新爲主頁中的按鈕內容。
請幫助我如何完成上述任務。
我有兩個頁面。 我)首頁 - 這包含一個按鈕來顯示用戶所選城市(由defalut德里) II)末頁 - 哪些包含列表框中(所有城市在這裏展示)如何更新Windows Phone 8頁面2中的page1按鈕的內容
所以當用戶單擊主頁上的按鈕,然後我將導航到ListPage以選擇城市。 當用戶點擊列表中的任何城市時,我不得不關閉該ListPage,然後立即將所選城市更新爲主頁中的按鈕內容。
請幫助我如何完成上述任務。
如果您正在使用「MVVM光」庫,然後就可以使用Messenger服務像這樣....
在選擇後第二頁改變發送消息
Messenger.Default.Send<type>(message,token);
,然後在第1頁視圖模型的consructor
Messenger.Default.Register<type>(this,token,Method);
這裏令牌應該是相同發件人令牌....
然後
void Method(type message)
{
button.content = message;
}
基本的方法是實現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));
}
}
我建議你改變你的工作流程以使用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; }
}
這會是非常簡單的。您需要做的是使用NavigationService.Navigate(),然後將所選城市和主頁uri一起附加到主頁頁面中,使用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;
感謝