体育资讯网

您现在的位置是:首页 > 足球教学 > 正文

足球教学

mvvm架构wpf源码(mvvm架构)

hacker2022-06-09 00:04:28足球教学51
本文目录一览:1、谁能给个WPF使用mvvmLight模式的开源例子

本文目录一览:

谁能给个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

转载请说明来源于"体育资讯网"

本文地址:http://szwondfo.com/post/28596.html

发表评论

评论列表

  • 惑心野慌(2022-06-09 01:54:37)回复取消回复

    ing _display;public string Display{get{return _display;}set{_display = value;RaisePropertyChanged("Disp

  • 瑰颈好倦(2022-06-09 04:36:19)回复取消回复

    iewModel : ViewModelBase{private string _input;public string Input{get{return _input;}set{_input = v

  • 可难好怪(2022-06-09 02:17:31)回复取消回复

    Grid="{x:Reference grid}" x:Key="columnConverter"/    /Window.Resources    Grid        DataGrid x:Name="grid" Horiz

  • 绿邪寄晴(2022-06-09 00:07:45)回复取消回复

    nager.RequerySuggested -= value; }}}3创建示例用 ViewModel让 ViewModel 继承自 ViewModelBase。

  • 慵吋春慵(2022-06-09 03:10:02)回复取消回复

    ventArgs(propertyName));}}}2创建一个DelegateCommandpublic class DelegateCommand : ICommand{readonly Actionobject _execute;readonly Predicateobject _