1.代码架构
2.具体代码
QueryUser.xaml:
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="MVVMDemo.View.QueryUser" xmlns:vm="clr-namespace:MVVMDemo.ViewModel" mc:Ignorable="d" d:DesignHeight="300" d:DesignWidth="400"> <UserControl.Resources> <vm:QueryUserViewModel x:Key="QUVM"/> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource QUVM}" > <Button Content="查询" HorizontalAlignment="Left" Margin="191,36,0,0" VerticalAlignment="Top" Width="75" Command="{Binding SearchCmd}" Click="SearchBtn_click"/> <TextBox Name="SearchTxt" HorizontalAlignment="Left" Height="23" Margin="37,35,0,0" TextWrapping="Wrap" Text="{Binding SearchText, Mode=TwoWay}" VerticalAlignment="Top" Width="120"/> <sdk:DataGrid HorizontalAlignment="Left" ItemsSource="{Binding ResultText}" Height="108" Margin="37,97,0,0" VerticalAlignment="Top" Width="229" AutoGenerateColumns="False" AlternatingRowBackground="BlanchedAlmond"> <sdk:DataGrid.Columns> <!--<sdk:DataGridTextColumn Header="ID" Width="50" ></sdk:DataGridTextColumn>--> <sdk:DataGridTextColumn Header="Name" Binding="{Binding Name}" Width="100"></sdk:DataGridTextColumn> </sdk:DataGrid.Columns> </sdk:DataGrid> </Grid> </UserControl>
UserHandle.cs:
namespace MVVMDemo.Model { public class UserHandle { private ObservableCollection<User> userList = new ObservableCollection<User>(); public UserHandle() { } /// <summary> /// 获取用户 /// </summary> /// <param name="userName"></param> public void getUserList(string userName) { userName = "%" + userName + "%"; string sqlStr = "select * from t_user where user_name like '" + userName + "'"; UserInfoWebServiceSoapClient userInfoClient = new UserInfoWebServiceSoapClient(); userInfoClient.GetUserByNameCompleted += new EventHandler<GetUserByNameCompletedEventArgs>(userInfoClient_GetUserByNameCompleted); userInfoClient.GetUserByNameAsync(sqlStr); //int i = 10; /////// } /// <summary> /// 完成获取用户 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void userInfoClient_GetUserByNameCompleted(object sender, GetUserByNameCompletedEventArgs e) { userList = e.Result; getUserListEvent(userList);//触发事件,传递获取到的用户 } /// <summary> /// 定义处理获取用户完成后的委托 /// </summary> /// <param name="userList"></param> public delegate void GetUserListEventHandle(ObservableCollection<User> userList); /// <summary> /// 将委托和事件关联 /// </summary> public event GetUserListEventHandle getUserListEvent; } }
QueryUserViewModel.cs:
namespace MVVMDemo.ViewModel { public class QueryUserViewModel : INotifyPropertyChanged { #region 变量 public event PropertyChangedEventHandler PropertyChanged; public ObservableCollection<User> UserList; public Model.UserHandle userHandle = new Model.UserHandle(); /// <summary> /// 查询关键字 /// </summary> private string _SearchText = string.Empty; /// <summary> /// 查询结果 /// </summary> private ObservableCollection<User> _ResultText; /// <summary> /// 查询命令 /// </summary> private ICommand _SearchCmd; #endregion #region 属性 /// <summary> /// 查询关键字 /// </summary> public string SearchText { get { return _SearchText; } set { _SearchText = value; if (PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs("SearchText")); } } } /// <summary> /// 查询结果 /// </summary> public ObservableCollection<User> ResultText { get { return _ResultText; } set { _ResultText = value; if (PropertyChanged != null) { this.PropertyChanged(this, new PropertyChangedEventArgs("ResultText")); } } } /// <summary> /// 查询命令 /// </summary> public ICommand SearchCmd { get { return _SearchCmd; } } #endregion #region 构造函数 public QueryUserViewModel() { //添加相应委托实例到的事件列表 _SearchCmd = new QueryUserCommand(SearchUserByUserName); userHandle.getUserListEvent += new UserHandle.GetUserListEventHandle(SetResult); } #endregion #region 方法 /// <summary> /// 根据用户名查询用户(模糊查询) /// </summary> public void SearchUserByUserName() { if (!string.IsNullOrEmpty(SearchText)) { userHandle.getUserList(SearchText); } } /// <summary> /// 根据用户名查询用户(模糊查询) /// </summary> public void SearchUserByUserName(string text) { if (!string.IsNullOrEmpty(SearchText)) { userHandle.getUserList(SearchText); } } /// <summary> /// 获取用户完成事件处理函数 /// </summary> /// <param name="userList"></param> public void SetResult(ObservableCollection<User> userList) { ResultText = userList; } #endregion } }
QueryUserCommand.cs:
namespace MVVMDemo.Command { public class QueryUserCommand:ICommand { /// <summary> /// 定义Action委托 /// </summary> private Action _Handler; public QueryUserCommand(Action Handler) { this._Handler = Handler;//委托方法 } /// <summary> /// 当出现影响是否应执行该命令的更改时发生。 /// </summary> public event EventHandler CanExecuteChanged; /// <summary> /// 定义用于确定此命令是否可以在其当前状态下执行的方法。 /// </summary> /// <param name="para"></param> /// <returns></returns> public bool CanExecute(object para) { if (para != null) { CanExecuteChanged(para, new EventArgs()); } return true; } /// <summary> /// 定义在调用此命令时调用的方法。 /// </summary> /// <param name="para"></param> public void Execute(object para) { _Handler(); //调用委托 } } }
大致先贴这些,以后再作讲解