2

大家好,我正在使用 windows phone 8 应用程序,我面临一个问题,我正在我的数据透视项中加载一些数据,如果用户点击用户控件打开,我通过用户控件修改数据。数据已成功保存到数据库中,但我的数据透视项目没有立即更新。我正在使用可观察的集合,如下所示。

我在 mypivot.xaml.cs 文件中使用的 ObservableCollection 如下所示

ObservableCollection<MyWrapper> saveinfo = new ObservableCollection<MyWrapper>();
public ObservableCollection<MyWrapper> savedWordBankCollection
{ get { return saveinfo; } }

//MyWrapper class structure

public class MyWrapper: INotifyPropertyChanged
{
    private string desc;
    public event PropertyChangedEventHandler PropertyChanged;
    private void NotifyChange(PropertyChangedEventArgs e)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, e);
    }
    public string Name { get; set; }
    public string NameDescription
    {
        get { return desc; }
        set
        {
            desc = value;
            NotifyChange(new PropertyChangedEventArgs("NameDescription"));
        }
    }
    public string NameId { get; set; }   
    public string NameLocId { get; set; }
}

现在如下所示,我正在将数据加载到数据透视页面中的数据透视项目中

private void LoadWordbank()
{
        List<MysecondWrapper> dbData = helper.FetchAllName(thisApp.CurrentName.Id);
    if (dbData.Count != 0)
    {
        foreach (MySerconWrapper item in dbData)
        {
            saveinfo.Add(new MyWrapper { NameLocalId = item.Id.ToString(), Name= item.Name, NameDescription = item.Description, NameId = thisApp.CurrentName.Id});
        }
    }
}

mypivot.xaml 如下所示。我不是在写完整的代码,而是我如何分配我展示的属性。

 <TextBlock x:Name="wordbankStored" Grid.Column="0" Grid.Row="0" Text="{Binding Name}"/>                               
 <Button x:Name="btnWordDescription" Grid.Row="1" Grid.Column="0" Content="{Binding NameDescription}" 
Tag="{Binding}" Click="btnNameDescription_Click"/>

在上面的文本块中,我尝试过:

Content="{Binding NameDescription, Mode=TwoWay}"

但它没有用,所以我已经删除了。在 btnNameDescription_Click 上,我的用户控件打开,我可以将数据保存在 wp8 的本地数据库中,但它不会立即显示在我的数据透视表中。请给我建议什么以及如何做?我错了。需要帮忙。

4

1 回答 1

0

我已经做到了,首先不需要刷新页面,observable collection可以自动完成。我的 observableCollection 是 saveInfoCollection。

可观察集合有三种可能性

1)从可观察的集合中删除一个项目。

2)修改可观察集合中的项目。

3)在可观察集合中添加一个项目。

解释

1)在第一种情况下,当我从可观察集合中删除项目时,我将使用可观察集合的删除方法,如下所示

//savedData is my observableCollection name.
savedData.Remove(selected);

2)在第二种情况下,当我从 observable 集合中修改项目时,在这里您将看到 observable 集合的魔力,我在 Tag 属性的帮助下获取项目对象,因此我将更新我的数据库它我的 observable收藏会自动更新。

3)在这种情况下,您可以将新的数据对象添加到可观察集合中,它会自动更新可观察集合。

如果您使用的是 observableCollection,则无需刷新页面。这就是 ViewModel 的魔力。

于 2014-03-27T06:55:23.890 回答