现在的位置: 首页 > 综合 > 正文

一个简单地MVVM模式实现,直接上码

2017年10月13日 ⁄ 综合 ⁄ 共 4849字 ⁄ 字号 评论关闭

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(); //调用委托
        }
    }
}

大致先贴这些,以后再作讲解

 

【上篇】
【下篇】

抱歉!评论已关闭.