我有Listview
个对象
当我从Listview
中选择一个项目时,我需要知道selectedObject
的{{1}}是否已被修改为是否激活Listview
。
这是我继续使用Mvvmlight和Entity Framework 5的方法:
saveButton
这是有效的,但速度很慢。
事实上,每当我从listview中选择一个对象时,我都要求DB知道public RelayCommand SaveObjectCommand { get; set; }
public MainViewModel()
{
SaveObjectCommand = new RelayCommand(SaveObject, CanSaveObject);
}
private bool CanSaveObject()
{
using (DBContext ctx = new DBContext())
{
//selectedObject is the object selected from the Listview
Object dbObject = ctx.Object.Single(x => x.ID == selectedObject.ID);
if (selectedObject == dbObject) //simplified
return false;
}
}
是否等于DB中的同一个对象(我知道是否已经修改了selectedObject属性)
有更好的方法吗?
我听说过DBContext.ChangeTracker,但它似乎需要一个DB请求。
答案 0 :(得分:0)
我无法添加评论。 你用的是什么数据库?它紧凑吗?
您的问题的解决方法:您可以声明属性
private List<Object> MyCollectionOfObjects {get; set;}
使用您自己的集合并在CanSaveObject()wethod中访问它。如果DB需要更新,您应该更新DB和此属性。
答案 1 :(得分:0)
您提到,您的textblocks
可能textboxes
可以修改所选对象属性,您可以在其中检查该对象CanSave
。我建议查看IEditableObject界面
快速示例
public class Customer : IEditableObject
{
struct CustomerData
{
internal string id ;
internal string firstName ;
internal string lastName ;
}
private CustomersList parent;
private CustomerData custData;
private CustomerData backupData;
private bool inTxn = false;
// Implements IEditableObject
void IEditableObject.BeginEdit()
{
Console.WriteLine("Start BeginEdit");
if (!inTxn)
{
this.backupData = custData;
inTxn = true;
Console.WriteLine("BeginEdit - " + this.backupData.lastName);
}
Console.WriteLine("End BeginEdit");
}
void IEditableObject.CancelEdit()
{
Console.WriteLine("Start CancelEdit");
if (inTxn)
{
this.custData = backupData;
inTxn = false;
Console.WriteLine("CancelEdit - " + this.custData.lastName);
}
Console.WriteLine("End CancelEdit");
}
void IEditableObject.EndEdit()
{
Console.WriteLine("Start EndEdit" + this.custData.id + this.custData.lastName);
if (inTxn)
{
backupData = new CustomerData();
inTxn = false;
Console.WriteLine("Done EndEdit - " + this.custData.id + this.custData.lastName);
}
Console.WriteLine("End EndEdit");
}
public Customer(string ID) : base()
{
this.custData = new CustomerData();
this.custData.id = ID;
this.custData.firstName = "";
this.custData.lastName = "";
}
public string ID
{
get
{
return this.custData.id;
}
}
public string FirstName
{
get
{
return this.custData.firstName;
}
set
{
this.custData.firstName = value;
this.OnCustomerChanged();
}
}
public string LastName
{
get
{
return this.custData.lastName;
}
set
{
this.custData.lastName = value;
this.OnCustomerChanged();
}
}
internal CustomersList Parent
{
get
{
return parent;
}
set
{
parent = value ;
}
}
private void OnCustomerChanged()
{
if (!inTxn && Parent != null)
{
Parent.CustomerChanged(this);
}
}
public override string ToString()
{
StringWriter sb = new StringWriter();
sb.Write(this.FirstName);
sb.Write(" ");
sb.Write(this.LastName);
return sb.ToString();
}
}
我请求DB知道selectedObject是否相同 DB中的对象(我知道selectedObject属性是否具有 已被修改)
在你的情况下,最好在内存中进行检查,而不是去数据库,看看是否有任何值与输入的值不同。