我正在使用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被调用了两次,但是我不知道为什么,因为我没有设置这个值。任何帮助/指导都将是感激的。非常感谢。
3条答案
按热度按时间whhtz7ly1#
我想我找到了我的问题。但是它给我带来了另一个问题。我在加载的时候两次调用添加PropertyChanged处理程序的方法。这是我必须解决的另一个问题。
谢谢你Lavr试图帮助我摆脱困境。
jaxagkaj2#
1.将断点放在AccountID setter中并查看堆栈跟踪,然后调用setter。您可以找到更新您的属性两次的“who”。
1.您也可以更新AccountID setter,如下所示:
of1yzvn43#
两次调用propertychanged也有同样的问题。当我试图捕捉额外的propertychanged调用时,调用堆栈显示它是从[外部代码]调用的。在我将Xamarin版本从4.0升级到最新版本(Xamarin 5.0)后。