在pivotitem页面刷新数据绑定内容

时间:2014-04-13 13:01:19

标签: pivotitem

我开发了一个应用程序,并遇到了以下部分的问题。

我有一个'文本块'在可观察的项目集合中绑定精确项目('项目')并显示数字。每个项目都有一个名为' 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;
        }

也许现在你可以告诉我如何在我点击它(文本块)时立即更改文本块的文本。我会感谢任何建议,因为这一刻阻止了我第二天开发我的应用程序。

1 个答案:

答案 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));
        }
    }

希望它对任何人都有帮助。