下面是我將如何使用MVVM模式的類似c#的僞代碼中的一個非常簡單的示例。
首先,我將定義我的模型,它定義了我的配置並進行了序列化/反序列化。我更喜歡使用NetDataContractSerializer來做到這一點。
[DataContract]
public sealed class Person
{
[DataMember]
public string Name {get;set;}
[DataMember]
public int Age {get;set;}
}
我的視圖模型將有保存這個配置的當前實例
public sealed class ViewModel : DependencyObject
{
#region Person
/// <summary>
/// The <see cref="DependencyProperty"/> for <see cref="Person"/>.
/// </summary>
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register(
PersonPropertyName,
typeof(Person),
typeof(ViewModel),
new UIPropertyMetadata(null));
/// <summary>
/// The name of the <see cref="Person"/> <see cref="DependencyProperty"/>.
/// </summary>
public const string PersonPropertyName = "Person";
/// <summary>
/// The Person
/// </summary>
public string Person
{
get { return (Person)GetValue(PersonProperty); }
set { SetValue(PersonProperty , value); }
}
#endregion
// snip
在我ViewModel
我也有一個ICommand用於加載和保存配置的公共財產。這裏有很多關於ICommand的常見實現的問題,它將CanExecute
和Execute
的執行委託給ViewModel。
在您的UI中,您只需通過ViewModel綁定到配置模型的公共屬性即可。
<Window x:Class="Herp.DerpWindow" SnipXamlForBrevity="true">
<Window.DataContext>
<ViewModel xmlns="clr-namespace:Herp" />
</Window.DataContext>
<!-- and later... -->
<Label>The Person in Question:</Label>
<TextBlock Text="{Binding Person.Name}" />
<Label>Age</Label>
<TextBlock Text="{Binding Person.Age}" />
因爲配置模型在視圖模型的一個公共的DependencyProperty舉行,當你更換的UI與新值自動更新。當然,您可以使用INotifyPropertyChanged作爲通知綁定更新UI的替代方法,但我更願意保持簡單。
數據綁定存在很久之前wpf/xaml - *個人*我需要更多的理由,「設置」之間移動堆棧... –