我开发了一个应用程序,并遇到了以下部分的问题。
我有一个'文本块'在可观察的项目集合中绑定精确项目('项目')并显示数字。每个项目都有一个名为' Count'。
的属性当用户点击当前文本块(位于longlistselector(绑定项)的stackpanel中)时,我需要此文本块来显示新编号(想法是每次用户点击文本块,编号增加1)。
我发现的唯一方法是每次导航到当前的枢轴项目(文本块所在的位置),以强制透视项目从可观察集合中重新加载数据,其中更新的项目(以及' Count'属性)存储。但它很慢而且效果不好。
请建议每次用户点击当前文本块时如何使该数字出现在文本块中。
<phone:PivotItem Name="Documents" Header="Documents" Margin="0" >
<Grid>
<phone:LongListSelector ItemsSource="{Binding Items}" >
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal"
Height="95" >
<TextBlock Tap="Plus_Tap" Visibility="Visible" Width="20" Height="50" Text="{Binding Count}" FontFamily="Segoe WP Light"
FontSize="35" Foreground="White" Margin="2,0,0,2"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
</Grid>
</phone:PivotItem>
namespace PackMan
{
public partial class CategoryList : PhoneApplicationPage
{
public CategoryList()
{
InitializeComponent();
DataContext = App.ViewModel;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
private void Plus_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
PackList selectedList = (sender as TextBlock).DataContext as PackList;
selectedList.Count += 1;
NavigationService.Navigate(new Uri("/CategoryList.xaml?Documents", UriKind.Relative));
}
}
}
How to refresh the data in pivot item after updating data through xaml UI?
这里有一个人在他最后发布的回答他自己的问题时写道:&#34;如果你使用的是observableCollection而不需要刷新页面。这是ViewModel的神奇之处。&#34;但我从“物品”中加载了数据。 observable collection,不在ViewModel中,但在Packlist.cs中声明。也许这会有所帮助。
这里我增加了ObservableCollection中项目的Count属性&#34; Items&#34; :
private void Plus_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
PackList selectedList = (sender as TextBlock).DataContext as PackList;
selectedList.Count += 1;
我点按了文本块,文本块的文字没有显示任何更改。我点击返回 - 它将我带回菜单页面,而不是再次打开枢轴项目页面,并看到文本块的文本(数字)增加1。只有当我重新加载页面(数据透视表项)时才会看到更改,因为我在其构造函数和OnNavigatedTo方法中有这个:
public CategoryList()
{
InitializeComponent();
DataContext = App.ViewModel;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (!App.ViewModel.IsDataLoaded)
{
App.ViewModel.LoadData();
}
}
LoadData() - loads OBservable collection ("Items"), which has items, and Count as one of its properties:
public void LoadData()
{
this.Items = LoadNewLists();
this.IsDataLoaded = true;
}
也许现在你可以告诉我如何在我点击它(文本块)时立即更改文本块的文本。我会感谢任何建议,因为这一刻阻止了我第二天开发我的应用程序。
答案 0 :(得分:0)
我明白了。我应该阅读有关INotifyPropertyChanged接口并使用此接口的方法创建'Count'属性:
public int Count
{
get
{
return _count;
}
set
{
if (value != _count)
{
_count = value;
NotifyPropertyChanged("Count");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
希望它对任何人都有帮助。