我的东西是MVVMLight for Visual studio 2017,WPF,ORM with Dapper。
我有一个简单模型
public class User
{
public int userId;
public int userName;
}
我有一个VM
public class VMUserInfo:ViewModelBase
{
private User _userInfo;
private ObservableCollection<User> _userInfos;
public User UserInfo
{
get
{
return _userInfo;
}
set
{
_useInfo = value;
RaisePropertyChanged("UserInfo");
}
public ObservableCollection<User> UserInfos
{
get
{
return _userInfos;
}
set
{
_userInfos = value;
RaisePropertyChanged("UserInfos");
}
public RelayCommand<User> SelectUserCommand
{
get;set;
}
public VMUserInfo()
{
UserInfo = new user();
UserInfos = new ObservableCollection<User>();
SelectUserCommand = new RelayCommand<User>(SelectUser);
}
private void SelectUser(User uInfo)
{
if (uInfo != null)
{
UserInfo = uInfo;
}
}
}
我有一个带有两个文本框和一个数据网格的视图。 我从VM的属性(Userinfo.UserId,UserInfo.UserName)绑定(双向)这两个文本框;
我将数据网格绑定到VM的UserInfos集合
My Command Binding from XML就像下面的
<DataGrid x:Name="dataGridUsers" Grid.Row="2"
ItemsSource="{Binding Path=UserInfos}"
IsReadOnly="True" VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged" >
<mvvm:EventToCommand CommandParameter="{Binding
ElementName=dataGridUsers, Path=SelectedItem}" Command="{Binding
SelectUserCommand, Mode=OneWay}">
</mvvm:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
毕竟,当我从datagrid中选择一行时,一切正常,两个文本框都填充了所选数据。
这里有一个奇怪的事情是当我编辑文本框时,ROW FROM DATAGRID也会更新。 这让我很头疼,我终于可以解决它改变我的Command的方法了。
private void SelectUser(User uInfo)
{
if (uInfo != null)
{
UserInfo tempUser = new User();
tempUser.userId = uInfo.userId;
tempUser.userName = uInfo.userName;
UserInfo = tempUser;
}
}
即使它解决了,我仍然无法弄清楚为什么会这样。 有人请为我解释一下。感谢。