我有两页。 i)主页 - 其中包含一个显示用户所选城市的按钮(来自德里的defalut) ii)ListPage - 哪个包含列表框(此处显示所有城市)
因此,当用户点击HomePage中的按钮时,我将导航到ListPage以选择城市。 当用户点击列表中的任何城市时,我必须关闭该ListPage,然后立即将所选城市更新为主页中按钮的内容。
请帮我完成上述任务。
答案 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;
由于