WPF之MVVM(Step1)——自己實現ICommand接口


開發WPF應用程序,就不得不提MVVM。下面偶將展示MVVM中簡單的實現,其中主要在於ICommand的實現上,不過這種實現方式,應該不會有多少人在開發中使用,在此僅作學習使用。

准備:

界面繪制,簡單的以一個輸入框TextBox和一個按鈕Button組成。

 

入手

接下來寫ViewModel,注意其中ViewModel需要繼承接口INotifyPropertyChanged,其主要功能是保證后台屬性改變能夠通知到前台改變。

class TestViewModel : INotifyPropertyChanged
    {

        private string teststr;
        /// <summary>
        /// 待通知字符串
        /// </summary>
        public string TestStr
        {
            get { return teststr; }
            set
            {
                teststr = value;
                RaiseChanged("TestStr");
            }
        }

        /// <summary>
        /// 測試命令
        /// </summary>
        public ICommand TestCommand { get; set; }


        public TestViewModel()
        {
            TestCommand = new TestCommand(this);
        }

        #region INotifyPropertyChanged接口實現
        public void RaiseChanged(string propertyname)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyname));
            }
        }
        public event PropertyChangedEventHandler PropertyChanged;
        #endregion
    }

 

代碼中我們看到在TestViewModel中使用了一個TestCommand類。一下是此類的實現,其主要是ICommand的一個實現【開發中不建議使用】

class TestCommand : ICommand
    {

        public TestCommand(TestViewModel viemo)
        {
            viewmodel = viemo;
        }

        TestViewModel viewmodel{get;set;}

        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }

        int i = 0;

        /// <summary>
        /// 命令是否可用
        /// </summary>
        /// <param name="parameter"></param>
        /// <returns></returns>
        public bool CanExecute(object parameter)
        {
            return true;
        }

        /// <summary>
        /// 命令執行的操作
        /// </summary>
        /// <param name="parameter"></param>
        public void Execute(object parameter)
        {
            i++;
            viewmodel.TestStr = i.ToString();
        }

    }

 

最后就是將ViewModel內容綁定到界面啦!

XAML:

<Window x:Class="WPF_MVVM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="50"/>
        </Grid.RowDefinitions>
        <TextBox Text="{Binding TestStr}"/>
        <Button Grid.Row="1" Content="Test" Command="{Binding TestCommand}" />
    </Grid>
</Window>

 

CodeBehind:

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new TestViewModel();
        }
    }

 

這樣一個簡單的MVVM程序就實現啦。哦,對了,這里未用到Model,可以說還不是一個完整的MVVM,這個就留給自己去思考吧。

 


項目代碼托管地址:https://wpfmvvm.codeplex.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM