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
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>
}
- wpf mvvm 学习(1)
- wpf mvvm学习笔记
- WPF学习——MVVM
- WPF MVVM(Model-View-ViewModel)设计模式【学习】
- WPF-MVVM模式学习笔记1——MVVM概念预览
- C# WPF MVVM 实战 - 1
- WPF笔记(三)MVVM
- WPF学习系列 MVVM设计模式 一
- WPF、MVVM和Prism学习历程
- WPF、MVVM和Prism学习历程
- WPF-MVVM
- wpf-mvvm
- wpf mvvm
- WPF MvvM
- WPF与MVVM的实现(一)MVVM简介
- WPF/MVVM 快速开始指南(译)
- WPF-MVVM模式学习笔记5——NotificationObject学习
- WPF学习笔记:MVVM模式下,ViewModel如何关闭View?
- 多线程 - CreateThread - 参数
- 什么是句柄?为什么会有句柄?HANDLE
- DBeaver
- 用C#实现的等距Lagrange插值代码
- SQL 大数据导入
- wpf mvvm 学习(1)
- 多线程 - CreateThread - 启动选项
- 佣金计算详解02:获取目标值(比较项:一个或多个)二分查找
- 搞笑啊
- 多线程编程(4) - CreateThread - 入口函数的参数
- GRUB2引导iso镜像,U盘安装Ubuntu11.10
- Java多线程总结之由synchronized说开去
- 多线程编程(5) - CreateThread - 入口函数的指针
- CString 操作指南