1. ItemsSource绑定写法,此写法可为一个页面绑定多个对象
ItemsSource="{Binding QuoteItems, Source={StaticResource QIViewModel}}"
2. Style需合并到App.xaml

Style合并
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Assets/Styles.xaml"/>
<ResourceDictionary Source="Style.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
3. INotifyPropertyChanged
虽然看过INotifyPropertyChanged的相关资料,但其实一直没搞清楚他的真正作用,做了个测试,请看下面的代码,Product类有Id和Name属性。
[1] Name属性注释掉RaisePropertyChanged(new PropertyChangedEventArgs("Name")),可以得到Name的值,这点说明只要类的属性与控件binding,那么就可以获取到在页面输入的值。
[2] 我们在页面放置两个控件:textbox,textblock,并将text都绑定为product的name属性,在textbox中输入的name值没有反应到textblock上的,
去掉注释,textblock的文本跟随改变,这说明INotifyPropertyChanged的作用是:通知UI更新数据。

Product
public class Product : INotifyDataErrorInfo, INotifyPropertyChanged
{
public Product()
{
}
private int idValue;
public int Id
{
get { return idValue; }
set
{
if (IsIdValid(value) && idValue != value)
{
idValue = value;
RaisePropertyChanged(new PropertyChangedEventArgs("Id"));
}
}
}
private string nameValue;
public string Name
{
get { return nameValue; }
set
{
if (IsNameValid(value) && nameValue != value)
{
nameValue = value;
}
//RaisePropertyChanged(new PropertyChangedEventArgs("Name"));
}
}
//以下代码省略
}