wpf mvvm 学习(1)

来源:互联网 发布:php发送post get请求 编辑:程序博客网 时间:2024/06/05 11:17

做了五年的winform项目,进入wpf领域。

简单的页面:

 <Button Grid.Column="0" x:Name="fishTitle" Content="Title" Width="40" Height="30" Command="{Binding Confirm}"/>
        <TextBox Grid.Column="1" x:Name="fishTextbox"  Text="{Binding getfish,Mode=TwoWay}" Width="158" Height="40" HorizontalAlignment="Left" Margin="0,10" />
        <ListView Name="demolistview" Grid.Row="1" Grid.Column="1" Margin="5,10,5,0"
                  HorizontalAlignment="Stretch" ItemsSource="{Binding}" >
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="fish" />
                    <GridViewColumn Header="pidan"/>
                    <GridViewColumn Header="kele" />
                </GridView>
            </ListView.View>
        </ListView>

一个button  一个textbox  还有一个listview,button 可以这么写

 <Button Grid.Column="0" x:Name="fishTitle" Content="Title" Width="40" Height="30" Command="{Binding Confirm}" Click="fishTitle_Click"/>

既然想写这样的模式那就换成Command="{Binding Confirm}" 这种方式吧,

新建了一个vm类

public  class MainWindowVM:INotifyPropertyChanged


 private ICommand _confirm=null;
      public ICommand Confirm
      {
          get
          {
 
              if (_confirm == null)
              {
                  _confirm = new DelegateCommand((p) =>
                  {
                      if (fish == "123")
                      {
                          Debug.WriteLine("go go go!");
                          return;
                      }
                  },null
                  );
              }
              return _confirm;
          }
         set
         {
             _confirm = value;
         }
      

      }

点击事件,就直接调用方法:

 public  class DelegateCommand:ICommand 是另外一个类,继承自icommand,处理其中关系,代码很简单,看了代码基本就差不多了,只是和以往的方式有些不同,异曲同工吧!


看得懂就看得懂,不懂的话那也没办法!呵呵 


还有 就是tm怎么上传源代码,我勒个去


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;

namespace TryDemo
{
  public  class DelegateCommand:ICommand
    {
        private Func<object, bool> _canExecuteFunc;
        private Action<object> _executeAction;


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

        public DelegateCommand(Action<object> executeAction)
        {
            _executeAction = executeAction;
        
        }
        public DelegateCommand(Action<object> executeAction, Func<object, bool> canExecuteFunc)
            : this(executeAction)
        {
            _canExecuteFunc = canExecuteFunc;
        }
        public bool CanExecute(object parameter)
        {
       return _canExecuteFunc==null?true:_canExecuteFunc(parameter);
        }

        public void Execute(object parameter)
        {
            if (_executeAction != null)
            
            _executeAction(parameter);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Windows.Input;
using System.Windows.Controls;
using System.Diagnostics;

namespace TryDemo
{
  public  class MainWindowVM:INotifyPropertyChanged
    {
      public event PropertyChangedEventHandler PropertyChanged;

      private string fish = "fish";
      public string getfish
      {
          get
          {
           return fish;
          }
          set
          {
              if (fish != value)
              {
                  fish = value;
                  OnNotifyPropertyChange("getfish");
              }
          }
      }

      private List<MainWindowVM> _sendList = new List<MainWindowVM>();
      public List<MainWindowVM> SendList

      {
          get { return _sendList; }
          set
          {
              _sendList = value;
          }
      }

      private ICommand _confirm=null;
      public ICommand Confirm
      {
          get
          {
 
              if (_confirm == null)
              {
                  _confirm = new DelegateCommand((p) =>
                  {
                      if (fish == "123")
                      {
                          Debug.WriteLine("go go go!");
                          return;
                      }
                  },null
                  );
              }
              return _confirm;
          }
         set
         {
             _confirm = value;
         }
      
      }
      public void OnNotifyPropertyChange(string propertyName)
      {
          if (PropertyChanged != null)
          {
              PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
          }
      
      }

<Window x:Class="TryDemo.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">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ControlStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="60"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="60"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Button Grid.Column="0" x:Name="fishTitle" Content="Title" Width="40" Height="30" Command="{Binding Confirm}" Click="fishTitle_Click"/>
        <TextBox Grid.Column="1" x:Name="fishTextbox"  Text="{Binding getfish,Mode=TwoWay}" Width="158" Height="40" HorizontalAlignment="Left" Margin="0,10" />
        <ListView Name="demolistview" Grid.Row="1" Grid.Column="1" Margin="5,10,5,0"
                  HorizontalAlignment="Stretch" ItemsSource="{Binding}" >
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="fish" />
                    <GridViewColumn Header="pidan"/>
                    <GridViewColumn Header="kele" />
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>



}





原创粉丝点击