我正在使用wpf,mvvmlight和EF。我在我的实体对象上有两个松散链接的属性,在我的XAML中,我希望在另一个更改时有一个更改。现在,我遇到第一个属性更改事件触发两次的问题。
我的xaml设置是这样的,我在我的xaml上有DataGrid,我有我的
ItemsSource="{Binding MonthlyDonorDetails}" IsSynchronizedWithCurrentItem="True"
文本框就像,
<TextBox Grid.Column="0" Text="{Binding BankCustomerID}"/>
接下来,在我的虚拟机中,我加载了这样的数据,
int rowID = 1;
foreach(var row in monthlyDonorsQuery)
{
row.RowID = rowID++;
row.PropertyChanged += new PropertyChangedEventHandler(MonthlyDonorDataRow_PropertyChanged);
}
MonthlyDonorDetails = new ObservableCollection<MonthlyDonorFundCode>(monthlyDonorsQuery);
这为每行提供了一行行ID以帮助用户区分,并且(我在想)允许我为行中的各个字段更改时设置处理程序。然后我为网格设置了后台集合。这一切都很好。
现在,我希望能够将两个字段保持锁定状态,即AccountID和CustomerID。当用户手动\键入\输入更改AccountID字段时,我想要一些代码来更改CustomerID,但我不希望这种不必要的多次触发。现在它开了两次,我不知道为什么?谁能看到我的错误吗?
private void MonthlyDonorDataRow_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
if(e.PropertyName == "FirstName" || e.PropertyName == "LastName")
RaisePropertyChanged("DonorName");
if(e.PropertyName == "AccountID")
{
MonthlyDonorFundCode monthlyDonation = sender as MonthlyDonorFundCode;
int customerID = GetCimsIdFromBankCustomerID(monthlyDonation.AccountID);
Debug.WriteLine("should be setting to " + customerID);
}
}
当我调试这个时,我只能看到EF setter被调用两次,但我不知道为什么导致我没有设置该值。任何帮助\指导将不胜感激。非常感谢你。
答案 0 :(得分:1)
我想我发现了我的问题。但它给我带来了另一个问题。我正在调用加载PropertyChanged处理程序的方法,两次加载。这是我必须解决的另一个问题。
谢谢Lavr试图帮助我。
答案 1 :(得分:0)
您还可以像这样更新AccountID设置器:
private int _accountId;
public int AccountID
{
get { return this._accountId; }
set
{
if (this._accountId == value) return;
this._accountId = value;
this.RisePropertyChanged("AccountID");
}
}