mvvm架构wpf源码(mvvm架构)
本文目录一览:
- 1、谁能给个WPF使用mvvmLight模式的开源例子
- 2、如何用WPF实现一个最简单的Mvvm示例
- 3、大家推荐一本关于WPF的prism框架教程或书籍吧!!谢谢!
- 4、关于在MVVM架构下WPF中UserControl的 visibility Binding问题。 UserControl MVVM
- 5、WPF使用MVVM设计模式 问题
- 6、wpf使用MVVM框架,怎么计算DataGrid某一列的和并显示在一个textbox里
谁能给个WPF使用mvvmLight模式的开源例子
为何要做Viewmodel中定义控件呢?在Viewmodel定义PasswordBox的需要获得的属性,如Text,然后在view中应用绑定就可以了。
如何用WPF实现一个最简单的Mvvm示例
创建一个 ViewModelBase
public abstract class ViewModelBase : INotifyPropertyChanged{
//属性改变事件
public event PropertyChangedEventHandler PropertyChanged;
//当属性改变的时候mvvm架构wpf源码,调用该方法来发起一个消息mvvm架构wpf源码,通知View中绑定了propertyName的元素做出调整
public void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
2创建一个DelegateCommand
public class DelegateCommand : ICommand{
readonly Actionobject _execute;
readonly Predicateobject _canExecute;
public DelegateCommand(Actionobject execute)
: this(execute, null)
{
}
public DelegateCommand(Actionobject execute, Predicateobject canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
public void Execute(object parameter)
{
_execute(parameter);
}
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
}
3创建示例用 ViewModel
让 ViewModel 继承自 ViewModelBase。
public class MainWindowViewModel : ViewModelBase{
private string _input;
public string Input
{
get
{
return _input;
}
set
{
_input = value;
RaisePropertyChanged("Input");
}
}
private string _display;
public string Display
{
get
{
return _display;
}
set
{
_display = value;
RaisePropertyChanged("Display");
}
}
public DelegateCommand SetTextCommand { get; set; }
private void SetText(object obj)
{
Display = Input;
}
public MainWindowViewModel()
{
SetTextCommand = new DelegateCommand(new Actionobject(SetText));
}
}
4创建 View
最少只需要三个控件mvvm架构wpf源码:一个textbox拿来做输入,一个label拿来做输出,一个button拿来提交数据。
Window x:Class="WpfApplication1.MainWindow"
xmlns=""
xmlns:x=""
xmlns:local="clr-namespace:WpfApplication1.ViewModel"
Title="MainWindow" Height="237" Width="215"
Grid
Button Content="提 交" HorizontalAlignment="Left" Margin="37,137,0,0" VerticalAlignment="Top" Width="75"/
TextBox x:Name="tb" HorizontalAlignment="Left" Height="23" Margin="37,30,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/
Label HorizontalAlignment="Left" Margin="37,76,0,0" VerticalAlignment="Top" /
/Grid
/Window
5绑定 View 和 ViewModel
当 View 和 ViewModel 都已经创建完之后,最后一步就是把它哥俩绑定在一起了。这样,当 View 改变的时候,ViewModel 就会发生相应的改变,反之亦然。
Grid
Button Content="提 交" HorizontalAlignment="Left" Margin="37,137,0,0" VerticalAlignment="Top" Width="75" Command="{Binding SetTextCommand}"/
TextBox x:Name="tb" HorizontalAlignment="Left" Height="23" Margin="37,30,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="{Binding Input}" /
Label HorizontalAlignment="Left" Margin="37,76,0,0" VerticalAlignment="Top" Content="{Binding Display}" /
/Grid
大家推荐一本关于WPF的prism框架教程或书籍吧!!谢谢!
这个教程绝对是所有MVVM模式的始祖。上面附带有示例源码下载的。
另外MVVM Light Toolkit不知道你们用没有,可以留联系讨论一下。
关于在MVVM架构下WPF中UserControl的 visibility Binding问题。 UserControl MVVM
usercontrol如果不指定绑定,默认的是uc中的VM,需要指定要绑定的page的vm。
如:
mycontrols:TimePicker VerticalAlignment="Center" Visibility="{Binding DataContext.IsShowTimeUI,Converter={StaticResource BoolToVisibilityCollapseConverter},RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Page}}}" Width="100" Height="30"/mycontrols:TimePicker
这句代码表示绑定到父page的datacontext上。如果直接写,{Binding IsShowTimeUI},肯定是不起作用的。
WPF使用MVVM设计模式 问题
VIEW:你的界面,就是XAML
VIEWMODEL:界面的业务逻辑,也就是以前的XAML.CS文件
MODEL:你的业务数据模型
根据上面的定义,你应该写在VIEWMODEL上。两个VIEW之间的数据传递在MVVM中一律通过DataContext属性进行,DataContext在MVVM中至关重要!
MVVM的本质就是绑定,只是MVVM要求更严格,最正统的MVVM要求删除XAML的所有控件编程ID。
自己写MVVM非常容易出错,我推荐用simplemvvmtoolkit.(项目在codeplex中)。它有两个比较好用的地方,一个是属性改变通知用lamda表达式,这样当你用重构工具修改模型属性后PropertyChange里的属性名也会跟着改,避免了直接写属性字符串引起的错误。
还一个是它提供一个全局事件总线,DataContext数据交换要求两个ViewModel之间存在引用关系,但实际应用时不总是这样(如日志收集器界面)。通过这玩意可以多个ViewModel订阅事件,任意一个ViewModel发布事件其它订阅事件的ViewModel就能处理事件了。
simplemvvmtoolkit一个小问题就是用它的EventToCommand去绑定UserControl没效果,这一点mvvmlight(也在codeplex里)的RelayCommand就没问题,所以我做项目时一般是这两个库一起用。
通过simplemvvmtoolkit写MVVM你可以先把View画好、写出ViewModel和Model的模型定义,模型绑定全部可通过blend用鼠标完成,不许动用一下键盘。绑定完了只要专心填ViewModel的业务逻辑即可。
wpf使用MVVM框架,怎么计算DataGrid某一列的和并显示在一个textbox里
代码太长,这里没法贴全
地址:
Window x:Class="DataGridSample.MainWindow"
xmlns=""
xmlns:x=""
xmlns:local="clr-namespace:DataGridSample"
Title="MainWindow" Height="350" Width="525"
Window.Resources
local:ColumnConverter Grid="{x:Reference grid}" x:Key="columnConverter"/
/Window.Resources
Grid
DataGrid x:Name="grid" HorizontalAlignment="Left" Height="182" Margin="74,43,0,0" VerticalAlignment="Top" Width="331"
ItemsSource="{Binding DataSource}"
CurrentColumn="{Binding CurrColName,Converter={StaticResource columnConverter},Mode=OneWayToSource}"
/DataGrid
TextBox HorizontalAlignment="Left" Height="41" Margin="75,251,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="142"
Text="{Binding ColValue}"/
/Grid
/Window
转载请说明来源于"体育资讯网"