问题描述
我想每次点击“收藏夹”按钮时保存字符串并显示在另一个页面的列表视图上。
void OnGetFavorites(System.Object sender,System.EventArgs e)
{
Preferences.Set("cityName",_cityEntry.Text);
var tabbedPage = this.Parent.Parent as TabbedPage;
tabbedPage.CurrentPage = tabbedPage.Children[2];
}
protected override void OnAppearing()
{
base.OnAppearing();
FavoriteCities();
}
private void FavoriteCities()
{
string cityName = Preferences.Get("cityName","default_value");
var listView = new ListView();
listView.ItemsSource = new[] { cityName };
// Using ItemTapped
listView.ItemTapped += async (sender,e) => {
await displayAlert("Tapped",e.Item + " row was tapped","OK");
Debug.WriteLine("Tapped: " + e.Item);
((ListView)sender).SelectedItem = null; // de-select the row
};
// If using ItemSelected
// listView.ItemSelected += (sender,e) => {
// if (e.SelectedItem == null) return;
// Debug.WriteLine("Selected: " + e.SelectedItem);
// ((ListView)sender).SelectedItem = null; // de-select the row
// };
Padding = new Thickness(0,20,0);
Content = listView;
}
void OnItemTapped(System.Object sender,Xamarin.Forms.ItemTappedEventArgs e)
{
}
我的 ListView 看起来像:
<ContentPage.Content>
<ScrollView>
<StackLayout Padding="0,30,0">
<ListView x:Name="listView"
ItemTapped="OnItemTapped"
ItemsSource="{Binding .}" />
</StackLayout>
</ScrollView>
</ContentPage.Content>
现在每次用新的替换旧的字符串。如何排列所有字符串?
解决方法
有很多不同的方法来解决这个问题。我会给你一个相当简单的
首先,你需要一个数据结构来保存你的数据
ObservableCollection<string> CityData { get; set; }
然后您需要更新您的 XAML 以绑定到它
... ItemsSource="{Binding CityData}" />
然后在页面构造函数中初始化CityData
并设置BindingContext
CityData = new ObservableCollection<string>();
this.BindingContext = this;
重要去掉 FavoriteCities
那里没有任何用处,出于某种原因,您正在完全重新创建您的 XAML 中已有的 UI 代码
然后在你的页面中添加一个公共方法来更新数据
public void AddCity(string city)
{
CityData.Add(city);
}
最后,在你的另一个页面
void OnGetFavorites(System.Object sender,System.EventArgs e)
{
// I really don't know what this is for
Preferences.Set("cityName",_cityEntry.Text);
var tabbedPage = this.Parent.Parent as TabbedPage;
// important - cast to the correct type of Page2 - I don't know what that is
var page = (MyPageClass) tabbedPage.Children[2];
// add the new City
page.AddCity(cityEntry.Text);
// navigate
tabbedPage.CurrentPage = page;
}