wpf MVVM 示例
时间: 2023-07-07 15:03:49 浏览: 114
以下是一个简单的 WPF MVVM 示例:
首先,我们需要创建一个 ViewModel 类,它将包含我们的业务逻辑和数据。在这个示例中,我们将创建一个简单的计算器,使用 MVVM 模式来实现。
```c#
public class CalculatorViewModel : INotifyPropertyChanged
{
private int _firstNumber;
private int _secondNumber;
private int _result;
public int FirstNumber
{
get { return _firstNumber; }
set
{
if (_firstNumber != value)
{
_firstNumber = value;
OnPropertyChanged("FirstNumber");
Calculate();
}
}
}
public int SecondNumber
{
get { return _secondNumber; }
set
{
if (_secondNumber != value)
{
_secondNumber = value;
OnPropertyChanged("SecondNumber");
Calculate();
}
}
}
public int Result
{
get { return _result; }
set
{
if (_result != value)
{
_result = value;
OnPropertyChanged("Result");
}
}
}
private void Calculate()
{
Result = FirstNumber + SecondNumber;
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
```
在 ViewModel 中,我们定义了三个属性:FirstNumber、SecondNumber 和 Result。这些属性都实现了 INotifyPropertyChanged 接口,以便在属性值更改时通知视图进行更新。我们还实现了一个 Calculate 方法,该方法将两个数字相加,并将结果分配给 Result 属性。
接下来,我们需要创建一个 View 类,它将显示我们的用户界面。在此示例中,我们将使用 XAML 来定义我们的用户界面。
```xml
<Window x:Class="CalculatorApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Calculator" Height="150" Width="250">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Label Grid.Row="0" Content="First Number:"/>
<TextBox Grid.Row="0" Margin="80,0,0,0" Text="{Binding FirstNumber, Mode=TwoWay}"/>
<Label Grid.Row="1" Content="Second Number:"/>
<TextBox Grid.Row="1" Margin="80,0,0,0" Text="{Binding SecondNumber, Mode=TwoWay}"/>
<Label Grid.Row="2" Content="Result:"/>
<TextBox Grid.Row="2" Margin="80,0,0,0" Text="{Binding Result, Mode=OneWay}" IsReadOnly="True"/>
</Grid>
</Window>
```
在 XAML 中,我们定义了一个包含三个文本框和标签的网格。每个文本框都绑定到 ViewModel 中的相应属性。注意,FirstNumber 和 SecondNumber 属性使用 TwoWay 绑定模式,这意味着视图中的更改也会更新 ViewModel 中的值。Result 属性使用 OneWay 绑定模式,这意味着它只从 ViewModel 更新到视图,而不能从视图更新到 ViewModel。
最后,我们需要在 App.xaml.cs 中创建一个实例并将其设置为 MainWindow 的 DataContext。
```c#
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var viewModel = new CalculatorViewModel();
var view = new MainWindow { DataContext = viewModel };
view.Show();
}
}
```
这样,我们就完成了 WPF MVVM 的示例。当用户在文本框中输入数字时,ViewModel 将更新并计算结果。然后,通过数据绑定,结果将显示在 Result 文本框中。
阅读全文