1.code snippet:代码片段
C#中的代码段诸如prop、ctor等通过两下Tab键自动生成固定模式代码的技术,叫code snippet。可以在VS【工具】——【代码片段管理器】——【CSharp】——【VisualC#】看到所有的代码片段。
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>propn</Title>
<Shortcut>propn</Shortcut>
<Description>类名属性和支持字段的代码片段</Description>
<Author>Microsoft Corporation</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
</SnippetTypes>
</Header>
<Snippet>
<Declarations>
<Literal>
<ID>type</ID>
<ToolTip>属性类型</ToolTip>
<Default>int</Default>
</Literal>
<Literal>
<ID>property</ID>
<ToolTip>属性名</ToolTip>
<Default>MyProperty</Default>
</Literal>
<Literal>
<ID>field</ID>
<ToolTip>支持此属性的变量</ToolTip>
<Default>myVar</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[private $type$ $field$;
public $type$ $property$
{
get { return $field$;}
set
{
$field$ = value;
this.RaisePropertyChanged("$property$");
}
}
$end$]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
2.如何在VS中折叠到定义时 Ctrl+M+O连通#region一同折叠
3.写软件UI的精髓文不如表,表不如图
4.MVVM设计模式详解
4.1 MVVM=Model-View-ViewModel
4.2 为什么要使用MVVM模式
团队层面:统一思想方式和实施办法(套路和路数是固定的)
架构层面:稳定、解耦(橘子皮原理)
代码层面:可读、可测、可替换
4.3 Model:现实世界中对象的抽象结果
View:UI
ViewModel:Model for View
ViewModel与View的沟通:传递数据<<--->>数据属性 DependencyProperty 传递操作<<-->>命令属性 类似方法、事件与命令
5.MVVM一般要建立的几个文件夹
6.SimpleMVVM
/// <summary>
/// ViewModel的基类
/// </summary>
class NotificationObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
class DelegateCommand : ICommand
{
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
if (CanExecuteFunc==null)
{
return true;
}
return CanExecuteFunc(parameter);
}
public void Execute(object parameter)
{
if (ExecuteAction==null)
{
return;
}
ExecuteAction(parameter);
}
public Action<object> ExecuteAction { get; set; }
public Func<object,bool> CanExecuteFunc { get; set; }//接受一个object参数,返回一个bool类型参数
}
class MainWindowViewModel:NotificationObject
{
private double input1;
public double Input1
{
get { return input1; }
set
{
input1 = value;
this.RaisePropertyChanged("Input1");
}
}
private double input2;
public double Input2
{
get { return input2; }
set
{
input2 = value;
this.RaisePropertyChanged("Input2");
}
}
private double result;
public double Result
{
get { return result; }
set
{
result = value;
this.RaisePropertyChanged("Result");
}
}
public DelegateCommand AddCommand { get; set; }
private void Add(object prop)
{
Result = Input1 + Input2;
}
public DelegateCommand SaveCommand { get; set; }
private void Save(object prop)
{
SaveFileDialog dlg = new SaveFileDialog();
dlg.ShowDialog();
}
public MainWindowViewModel()
{//将命令的方法与委托命令属性关联起来
AddCommand = new DelegateCommand();
AddCommand.ExecuteAction = new Action<object>(Add);
SaveCommand = new DelegateCommand();
SaveCommand.ExecuteAction = new Action<object>(Save);
}
}
<Window x:Class="SimpleMvvmDemoClient.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:SimpleMvvmDemoClient"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30"/>
<RowDefinition Height="20*"/>
<RowDefinition Height="20*"/>
<RowDefinition Height="20*"/>
<RowDefinition Height="20*"/>
</Grid.RowDefinitions>
<Button Content="Save" Grid.Row="0" Command="{Binding SaveCommand}"/>
<TextBox Grid.Row="1" Text="{Binding Input1}" Margin="10" Background="AliceBlue" TextAlignment="Center" FontSize="30"/>
<TextBox Grid.Row="2" Text="{Binding Input2}" Margin="10" Background="AliceBlue" TextAlignment="Center" FontSize="30"/>
<TextBox Grid.Row="3" Text="{Binding Result}" Margin="10" Background="AliceBlue" TextAlignment="Center" FontSize="30"/>
<Button Content="Add" Grid.Row="4" Margin="10" Command="{Binding AddCommand}"/>
</Grid>
</Window>
UI的后台代码只有一句话:this.DataContext = new MainWindowViewModel(); 即可