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(); //调用委托
}
}
}
大致先贴这些,以后再作讲解