Windows phone 7 我如何在caliburn.micro中删除子VM
我在Caliburn.Micro中遇到了一些墓碑问题。我有一个pivot控件,其中每个pivot控件项中都有一个列表框。我只是想使用caliburn.micro的内置支持保存列表 我有一个MainViewModel,它将在一个pilot控件中初始化一系列子VMWindows phone 7 我如何在caliburn.micro中删除子VM,windows-phone-7,caliburn.micro,tombstoning,Windows Phone 7,Caliburn.micro,Tombstoning,我在Caliburn.Micro中遇到了一些墓碑问题。我有一个pivot控件,其中每个pivot控件项中都有一个列表框。我只是想使用caliburn.micro的内置支持保存列表 我有一个MainViewModel,它将在一个pilot控件中初始化一系列子VM public class MainViewModel : Conductor<IScreen>.Collection.OneActive { private readonly Func<QiushiListVie
public class MainViewModel : Conductor<IScreen>.Collection.OneActive
{
private readonly Func<QiushiListViewModel> _createQiushiListViewModel;
private readonly INavigationService _navigationService;
private readonly IEventAggregator _events;
readonly IWindowManager _windowManager;
readonly Func<AboutUsViewModel> _aboutUsViewModelFactory;
readonly Func<SettingsViewModel> _settingsViewModelFactory;
public MainViewModel(Func<QiushiListViewModel> createQiushiListViewModel,
INavigationService navigationService,
IEventAggregator events,
IWindowManager windowManager,
Func<AboutUsViewModel> aboutUsViewModelFactory,
Func<SettingsViewModel> settingsViewModelFactory
)
{
_createQiushiListViewModel = createQiushiListViewModel;
_navigationService = navigationService;
_events = events;
_windowManager = windowManager;
_aboutUsViewModelFactory = aboutUsViewModelFactory;
_settingsViewModelFactory = settingsViewModelFactory;
}
protected override void OnInitialize()
{
if(Items.Count==0)
{
Enumerable.Range(1, 5).Apply(x =>
{
var pivot = _createQiushiListViewModel();
switch (x)
{
case 1:
pivot.DisplayName = AppResources.App_Pivot_First;
pivot.Section = "late";
break;
case 2:
pivot.DisplayName = AppResources.App_Pivot_Second;
pivot.Section = "pic";
break;
case 3:
pivot.DisplayName = AppResources.App_Pivot_Third;
pivot.Section = "8hr";
break;
case 4:
pivot.DisplayName = AppResources.App_Pivot_Fourth;
pivot.Section = "week";
break;
case 5:
pivot.DisplayName = AppResources.App_Pivot_Fifth;
pivot.Section = "month";
break;
default:
break;
}
Items.Add(pivot);
});
ActivateItem(Items[0]);
}
...
}
}
它不起作用,什么都没有发生,没有错误,没有例外。QiushiItem类是可序列化的,请参见以下代码段
[DataContract]
public class QiushiItem : IComparable, IEqualityComparer<QiushiItem>
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Content { get; set; }
[DataMember]
public string ImageUrl { get; set; }
[DataMember]
public string MobileImageUrl { get; set; }
[DataMember]
public string Tags { get; set; }
[DataMember]
public int Tops { get; set; }
[DataMember]
public int Flops { get; set; }
[DataMember]
public int CommentsCount { get; set; }
[DataMember]
public DateTime PublishDateTime { get; set; }
public string Age
{
get
{
if (DateTime.Now.Subtract(PublishDateTime).Minutes < 10)
return AppResources.App_TimeSpan_JustNow;
if (DateTime.Now.Subtract(PublishDateTime).Minutes < 30)
return AppResources.App_TimeSpan_Recently;
if (DateTime.Now.Subtract(PublishDateTime).Minutes < 60)
return AppResources.App_TimeSpan_Half_Hour_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Hours < 2)
return AppResources.App_TimeSpan_An_Hour_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Hours < 3)
return AppResources.App_TimeSpan_Two_Hours_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Hours < 24)
return AppResources.App_TimeSpan_In_One_Day;
if (DateTime.Now.Subtract(PublishDateTime).Days < 2)
return AppResources.App_TimeSpan_One_Day_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Days < 3)
return AppResources.App_TimeSpan_Two_Days_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Days < 7)
return AppResources.App_TimeSpan_In_A_Week;
return DateTime.Now.Subtract(PublishDateTime).Days < 30 ? AppResources.App_TimeSpan_In_A_Month : AppResources.App_TimeSpan_Long_Ago;
}
}
int IComparable.CompareTo(object right)
{
if (!(right is QiushiItem)) throw new ArgumentException(AppResources.Ex_QiushiItem_Comparable_Argument_Exception, "right");
QiushiItem righItem = (QiushiItem) right;
return CompareTo(righItem);
}
public int CompareTo(QiushiItem right)
{
return Id.CompareTo(right.Id);
}
// Relational Operators.
public static bool operator <(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) < 0;
}
public static bool operator <=(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) <= 0;
}
public static bool operator >(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) > 0;
}
public static bool operator >=(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) >= 0;
}
private static DateTimeComparer _datetimeComparer;
public static IComparer DateTimeCompare
{
get
{
if (_datetimeComparer == null)
_datetimeComparer = new DateTimeComparer();
return _datetimeComparer;
}
}
private class DateTimeComparer : IComparer
{
#region IComparer Members
int IComparer.Compare(object left, object right)
{
if (!(left is QiushiItem))
throw new ArgumentException(AppResources.Ex_QiushiItem_Comparable_Argument_Exception, "left");
if (!(right is QiushiItem))
throw new ArgumentException(AppResources.Ex_QiushiItem_Comparable_Argument_Exception, "right");
QiushiItem leftItem = (QiushiItem)left;
QiushiItem rightItem = (QiushiItem)right;
return leftItem.PublishDateTime.CompareTo(
rightItem.PublishDateTime);
}
#endregion
}
public bool Equals(QiushiItem x, QiushiItem y)
{
if (x.Id == y.Id)
return true;
return false;
}
public int GetHashCode(QiushiItem obj)
{
return obj.Id.GetHashCode();
}
}
[DataContract]
公共类求实项目:i可比较,i质量比较
{
[数据成员]
公共int Id{get;set;}
[数据成员]
公共字符串内容{get;set;}
[数据成员]
公共字符串ImageUrl{get;set;}
[数据成员]
公共字符串MobileImageUrl{get;set;}
[数据成员]
公共字符串标记{get;set;}
[数据成员]
公共整数{get;set;}
[数据成员]
公共整数触发器{get;set;}
[数据成员]
public int commentscont{get;set;}
[数据成员]
public DateTime PublishDateTime{get;set;}
公共字符串时代
{
得到
{
if(DateTime.Now.Subtract(PublishDateTime.Minutes<10)
返回AppResources.App\u TimeSpan\u JustNow;
if(DateTime.Now.Subtract(PublishDateTime.Minutes<30)
返回AppResources.App\u TimeSpan\u最近;
if(DateTime.Now.Subtract(PublishDateTime.Minutes<60)
返回AppResources.App\u TimeSpan\u半小时前;
if(DateTime.Now.Subtract(PublishDateTime.Hours<2)
返回AppResources.App\u TimeSpan\u一小时前;
if(DateTime.Now.Subtract(PublishDateTime.Hours<3)
返回AppResources.App\u TimeSpan\u两小时前;
if(DateTime.Now.Subtract(PublishDateTime.Hours<24)
在一天内返回AppResources.App\u TimeSpan\u;
if(DateTime.Now.Subtract(PublishDateTime.Days<2)
返回AppResources.App\u TimeSpan\u一天前;
if(DateTime.Now.Subtract(PublishDateTime.Days<3)
两天前返回AppResources.App\u TimeSpan\u;
if(DateTime.Now.Subtract(PublishDateTime.Days<7)
每周返回AppResources.App\u TimeSpan\u;
return DateTime.Now.Subtract(PublishDateTime).Days<30?AppResources.App\u TimeSpan\u月内:AppResources.App\u TimeSpan\u很久以前;
}
}
int IComparable.CompareTo(对象右侧)
{
如果(!(右边是QiushiItem))抛出新的ArgumentException(AppResources.Ex_QiushiItem_Compariable_Argument_Exception,“右边”);
求实项目righItem=(求实项目)右;
返回CompareTo(righItem);
}
公共国际比较(求是项目右侧)
{
返回Id.CompareTo(右.Id);
}
//关系运算符。
公共静态布尔运算符=(求实项目左,求实项目右)
{
返回左。比较(右)>=0;
}
专用静态DateTimeComparer\u DateTimeComparer;
公共静态iComparerDateTimeCompare
{
得到
{
if(_datetimeComparer==null)
_datetimeComparer=新的datetimeComparer();
返回日期时间比较器;
}
}
私有类DateTimeComparer:IComparer
{
#地区I比较成员
int IComparer.Compare(对象左、对象右)
{
如果(!(左为求是项))
抛出新的ArgumentException(AppResources.Ex_QiushiItem_Compariable_Arguments_Exception,“左”);
如果(!(右边是求是项目))
抛出新的ArgumentException(AppResources.Ex_QiushiItem_Compariable_Arguments_Exception,“右”);
求实项目左项=(求实项目)左项;
求实项目右项=(求实项目)右项;
返回leftItem.PublishDateTime.CompareTo(
rightItem.PublishDateTime);
}
#端区
}
公共布尔等于(求实项x,求实项y)
{
如果(x.Id==y.Id)
返回true;
返回false;
}
公共int GetHashCode(QiushiItem obj)
{
返回obj.Id.GetHashCode();
}
}
除此之外,我还尝试使用自定义序列化
public override void Configure()
{
Id(x=>x.Section);
Property(x => x.QiushiItems).InAppSettings();
Property(x => x.QiushiItems).InAppSettings().Configure(x =>
{
x.Save = SaveStrokes;
x.Restore = RestoreStrokes;
});
}
void SaveStrokes(QiushiListViewModel vm, Func<string> serialize, StorageMode nMode)
{
IsolatedStorageHelper.SaveObject(vm.Section, vm.QiushiItems);
}
void RestoreStrokes(QiushiListViewModel vm, Func<string> serialize, StorageMode nMode)
{
// use IsolatedStorageSettings.ApplicationSettings[vm.DisplayName + "ThePropertyKey"]
// to check if the key exists, and if it is there get the serialized data and deserialize
if (vm.Section == null)
return;
if(IsolatedStorageSettings.ApplicationSettings[vm.Section]!=null)
IsolatedStorageHelper.GetObject<IEnumerable<QiushiItem>>(vm.Section);
}
public override void Configure()
{
Id(x=>x.Section);
属性(x=>x.QiushiItems);
属性(x=>x.QiushiItems).InAppSettings().Configure(x=>
{
x、 Save=SaveStrokes;
x、 Restore=RestoreStrokes;
});
}
void SaveStrokes(qiushilitviewmodel vm、Func序列化、StorageMode nMode)
{
IsolatedStorageHelper.SaveObject(vm.Section、vm.QiushiItems);
}
void RestoreStrokes(qiushilitviewmodel vm、Func序列化、StorageMode nMode)
{
//使用隔离存储设置。应用程序设置[vm.DisplayName+“ThePropertyKey”]
//要检查密钥是否存在,以及它是否存在,请获取序列化数据并反序列化
if(vm.Section==null)
返回;
if(IsolatedStorageSettings.ApplicationSettings[vm.Section]!=null)
IsolatedStorageHelper.GetObject(vm.Section);
}
但是,问题是有5个QiushilistViewModel,在进行逻辑删除时,保存/恢复
[DataContract]
public class QiushiItem : IComparable, IEqualityComparer<QiushiItem>
{
[DataMember]
public int Id { get; set; }
[DataMember]
public string Content { get; set; }
[DataMember]
public string ImageUrl { get; set; }
[DataMember]
public string MobileImageUrl { get; set; }
[DataMember]
public string Tags { get; set; }
[DataMember]
public int Tops { get; set; }
[DataMember]
public int Flops { get; set; }
[DataMember]
public int CommentsCount { get; set; }
[DataMember]
public DateTime PublishDateTime { get; set; }
public string Age
{
get
{
if (DateTime.Now.Subtract(PublishDateTime).Minutes < 10)
return AppResources.App_TimeSpan_JustNow;
if (DateTime.Now.Subtract(PublishDateTime).Minutes < 30)
return AppResources.App_TimeSpan_Recently;
if (DateTime.Now.Subtract(PublishDateTime).Minutes < 60)
return AppResources.App_TimeSpan_Half_Hour_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Hours < 2)
return AppResources.App_TimeSpan_An_Hour_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Hours < 3)
return AppResources.App_TimeSpan_Two_Hours_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Hours < 24)
return AppResources.App_TimeSpan_In_One_Day;
if (DateTime.Now.Subtract(PublishDateTime).Days < 2)
return AppResources.App_TimeSpan_One_Day_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Days < 3)
return AppResources.App_TimeSpan_Two_Days_Ago;
if (DateTime.Now.Subtract(PublishDateTime).Days < 7)
return AppResources.App_TimeSpan_In_A_Week;
return DateTime.Now.Subtract(PublishDateTime).Days < 30 ? AppResources.App_TimeSpan_In_A_Month : AppResources.App_TimeSpan_Long_Ago;
}
}
int IComparable.CompareTo(object right)
{
if (!(right is QiushiItem)) throw new ArgumentException(AppResources.Ex_QiushiItem_Comparable_Argument_Exception, "right");
QiushiItem righItem = (QiushiItem) right;
return CompareTo(righItem);
}
public int CompareTo(QiushiItem right)
{
return Id.CompareTo(right.Id);
}
// Relational Operators.
public static bool operator <(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) < 0;
}
public static bool operator <=(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) <= 0;
}
public static bool operator >(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) > 0;
}
public static bool operator >=(QiushiItem left, QiushiItem right)
{
return left.CompareTo(right) >= 0;
}
private static DateTimeComparer _datetimeComparer;
public static IComparer DateTimeCompare
{
get
{
if (_datetimeComparer == null)
_datetimeComparer = new DateTimeComparer();
return _datetimeComparer;
}
}
private class DateTimeComparer : IComparer
{
#region IComparer Members
int IComparer.Compare(object left, object right)
{
if (!(left is QiushiItem))
throw new ArgumentException(AppResources.Ex_QiushiItem_Comparable_Argument_Exception, "left");
if (!(right is QiushiItem))
throw new ArgumentException(AppResources.Ex_QiushiItem_Comparable_Argument_Exception, "right");
QiushiItem leftItem = (QiushiItem)left;
QiushiItem rightItem = (QiushiItem)right;
return leftItem.PublishDateTime.CompareTo(
rightItem.PublishDateTime);
}
#endregion
}
public bool Equals(QiushiItem x, QiushiItem y)
{
if (x.Id == y.Id)
return true;
return false;
}
public int GetHashCode(QiushiItem obj)
{
return obj.Id.GetHashCode();
}
}
public override void Configure()
{
Id(x=>x.Section);
Property(x => x.QiushiItems).InAppSettings();
Property(x => x.QiushiItems).InAppSettings().Configure(x =>
{
x.Save = SaveStrokes;
x.Restore = RestoreStrokes;
});
}
void SaveStrokes(QiushiListViewModel vm, Func<string> serialize, StorageMode nMode)
{
IsolatedStorageHelper.SaveObject(vm.Section, vm.QiushiItems);
}
void RestoreStrokes(QiushiListViewModel vm, Func<string> serialize, StorageMode nMode)
{
// use IsolatedStorageSettings.ApplicationSettings[vm.DisplayName + "ThePropertyKey"]
// to check if the key exists, and if it is there get the serialized data and deserialize
if (vm.Section == null)
return;
if(IsolatedStorageSettings.ApplicationSettings[vm.Section]!=null)
IsolatedStorageHelper.GetObject<IEnumerable<QiushiItem>>(vm.Section);
}