我有一個OberservableCollection存儲在我的獨立存儲中。如何從存儲在獨立存儲中的列表中編輯元素?
新場景包含一個列表。 Light包含一個Xpos en Ypos屬性。
如何編輯此列表?
因此,我想從IsoStorage中檢索它,更改2個屬性,然後再保存它。
希望有人能幫助我:)。
親切的問候, 尼爾斯
我有一個OberservableCollection存儲在我的獨立存儲中。如何從存儲在獨立存儲中的列表中編輯元素?
新場景包含一個列表。 Light包含一個Xpos en Ypos屬性。
如何編輯此列表?
因此,我想從IsoStorage中檢索它,更改2個屬性,然後再保存它。
希望有人能幫助我:)。
親切的問候, 尼爾斯
ObservableCollection
的有colleciton改變的事件,經過誰送的(基本集),以及一系列的參數。您可以收聽此CollectionChanged
活動,只收聽新增項目並對該項目執行操作。
如果您的集合是被引用對象的列表,則可以直接對這些對象執行編輯,並且這些更改將被鏡像到列表中。但是,如果您正在使用值類型列表,則需要標記該項目的方式,以便在從列表中刪除項目並重新添加項目時,添加不會觸發無限循環。
實施例:
class Clean<T>
{
public T Value;
public bool IsClean;
public Clean(T value, bool clean)
{
Value = value;
IsClean = clean;
}
}
此清潔類用於存儲一個值以及一個標誌,如果其被處理或不標記。
class Program
{
static void Main(string[] args)
{
ObservableCollection<Clean<int>> myCollection = new ObservableCollection<Clean<int>>();
myCollection.CollectionChanged += x_CollectionChanged;
myCollection.Add(new Clean<int>(2,false));
}
static void x_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
//Grab the collection being modified
ObservableCollection<Clean<int>> collection = sender as ObservableCollection<Clean<int>>;
if (collection == null)
{
// do some error checking action
}
//Only look at items being added
if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
{
//New item has been added
foreach (Clean<int> newItem in e.NewItems)
{
///Only perform the operation on new "dirty" objects
if (!newItem.IsClean)
{
collection.Remove(newItem);
//Add the new modified value and mark it as clean so that
// this process isn't run again
collection.Add(new Clean<int>(newItem.Value * 2,true));
}
}
}
}
}
來源:
ObservableCollection
MSDN Article
NotifyCollectionChangedEventHandler
MSDN Article
我只想取回集合按正常...
public IEnumerable<Scene> GetScenes()
{
using (var filesystem = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var fs = new IsolatedStorageFileStream("Scenes", FileMode.Open, filesystem))
{
var serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(IEnumerable<Scene>));
return serializer.ReadObject(fs) as IEnumerable<Scene>;
}
}
}
...然後編輯你需要什麼...
var myScenes = new ObservableCollection<Scene>(GetScenes());
var itemToUpdate = myScenes.Where(i => i.PropertyToCheck == "value to check");
itemToUpdate.PropertyToSet = "new value";
...並使用相同的密鑰,以確定它保存集合回獨立存儲。
SaveScenes(myScenes);
如果您使用FileMode.Create
它將覆蓋以前的集合。
public void SaveScenes(IEnumerable<Scene> scenes)
{
using (var filesystem = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var fs = new IsolatedStorageFileStream("Scenes", FileMode.Create, filesystem))
{
var serializer = new System.Runtime.Serialization.DataContractSerializer(typeof(IEnumerable<Scene>));
serializer.WriteObject(fs, Scenes);
}
}
}
您可以找到一個similar example on MSDN。