close
1: <Window x:Class="WpfApp3.MainWindow"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6: xmlns:local="clr-namespace:WpfApp3"
7: mc:Ignorable="d"
8: Title="MainWindow" Height="450" Width="800">
9: <Grid>10: <Button Height="60"
11: Width="200"
12: Click="MyButton_Click"
13: Content="點我"/>
14: 15: </Grid> 16: </Window>傳統習慣上,會寫呼叫一個 Callback函式(MyButton_Click)
1: private void MyButton_Click(object sender, RoutedEventArgs e)
2: {3: MessageBox.Show("點我!");
4: }現在,改用MVVM方式來進行上述工作
先新增一個ShowCommand類別並加入下列兩組命名空間
1: using System.Windows;
2: using System.Windows.Input;
ShowCommand繼承ICommand
滑鼠移至紅色底線提示,選擇”顯示可能的修正”
選擇”實作介面”
ShowCommand類別繼承ICommand
1: public class ShowCommand : ICommand
2: {3: public event EventHandler CanExecuteChanged;
4: 5: public bool CanExecute(object parameter)
6: {7: return true;
8: } 9: 10: public void Execute(object parameter)
11: { 12: MessageBox.Show(parameter.ToString()); 13: } 14: }接著新增一個MainViewModel類別並加入下列兩組命名空間
1: using System.Windows;
2: using System.Windows.Input;
1: using System.Windows;
2: using System.Windows.Input;
3: namespace WpfApp3
4: {5: public class MainViewModel
6: {7: ICommand showCommand = new ShowCommand();
8: public ICommand Show
9: {10: get { return showCommand; }
11: } 12: } 13: }修改xml,加入資料上下文(DataContext)
1: <Window.DataContext > 2: <local:MainViewModel /> 3: </Window.DataContext>移除Click事件,並新增Command屬性
跳出Command欄位
點選Command欄位右邊的黃色點,選擇”建立資料連結”
選擇MainViewModel.Show()
設定完成
加入命令參數CommandParameter
1: <Window.DataContext > 2: <local:MainViewModel /> 3: </Window.DataContext> 4: <Grid>5: <Button Height="60"
6: Width="200"
7: Command="{Binding Show, Mode=OneWay}"
8: CommandParameter="點擊我"
9: Content="點我"/>
10: </Grid>防止傳遞Null參數,所以修改一下ShowCommand類別
1: public class ShowCommand : ICommand
2: {3: public event EventHandler CanExecuteChanged;
4: 5: public bool CanExecute(object parameter)
6: {7: return true;
8: } 9: 10: public void Execute(object parameter)
11: {12: if( parameter!=null)
13: MessageBox.Show(parameter.ToString()); 14: } 15: }全站熱搜












留言列表
