使用DataGrid和Collection的MVVM光奇怪的动作

时间:2017-08-19 06:26:53

标签: c# wpf mvvm-light

我的东西是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;
            }
          }

即使它解决了,我仍然无法弄清楚为什么会这样。 有人请为我解释一下。感谢。

0 个答案:

没有答案