以下是一个基于Caliburn.Micro的WPF MVVM项目实例。在此示例中,我们将使用Caliburn.Micro框架来实现MVVM模式,同时使用简单的UI元素和代码,以便更好地理解和学习。
1. 创建一个新WPF项目
首先,我们需要创建一个新的WPF项目,并使用NuGet引用Caliburn.Micro框架。
2. 创建ViewModel和View
接下来,我们需要在项目中创建ViewModel和View。ViewModel负责处理项目的业务逻辑,而View负责显示用户界面。在这个例子中,我们将创建一个简单的计算器,其中ViewModel仅包含两个整数属性和一个计算方法,View包含两个TextBox和一个Button来启动计算。
2.1. 创建CalculationViewModel
我们首先创建一个名为CalculationViewModel的类,并继承自Caliburn.Micro的PropertyChangedBase类。CalculationViewModel包含两个整数属性和一个计算方法。
```csharp
using Caliburn.Micro;
public class CalculationViewModel : PropertyChangedBase
{
private int _firstNumber;
public int FirstNumber
{
get { return _firstNumber; }
set
{
if (_firstNumber != value)
{
_firstNumber = value;
NotifyOfPropertyChange(() => FirstNumber);
}
}
}
private int _secondNumber;
public int SecondNumber
{
get { return _secondNumber; }
set
{
if (_secondNumber != value)
{
_secondNumber = value;
NotifyOfPropertyChange(() => SecondNumber);
}
}
}
private int _result;
public int Result
{
get { return _result; }
set
{
if (_result != value)
{
_result = value;
NotifyOfPropertyChange(() => Result);
}
}
}
public void Calculate()
{
Result = FirstNumber + SecondNumber;
}
}
```
在以上代码中,我们使用Caliburn.Micro的PropertyChangedBase类来实现INotifyPropertyChanged接口,以在属性更改时通知UI。这个类包含三个属性:FirstNumber,SecondNumber和Result,以及一个Calculate方法,用于执行计算。
2.2 创建CalculationView
接下来,我们需要创建名为CalculationView的类,并在其中创建UI元素来显示和操作数据。
```xaml
<Window x:Class="WpfCaliburnMicroDemo.CalculationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org"
Title="Calculator" Height="200" Width="300">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBox x:Name="FirstNumber" Width="200" Margin="0,20,0,10" Text="{Binding FirstNumber}" />
<TextBox x:Name="SecondNumber" Width="200" Margin="0,10,0,20" Text="{Binding SecondNumber}" />
<Button x:Name="Calculate" Width="100" Content="Calculate" />
</StackPanel>
<Label Grid.Row="1" x:Name="Result" Content="{Binding Result}" FontSize="20" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" />
</Grid>
</Window>
```
在以上代码中,我们使用Grid和StackPanel布局来放置UI元素。我们使用TextBox输入两个整数,使用Button执行计算,使用Label显示计算结果。每个UI元素都与CalculationViewModel中的相应属性进行绑定。
3. 将ViewModel和View绑定在一起
最后,我们需要将ViewModel和View绑定在一起。可以使用Caliburn.Micro的ViewLocator类来实现自动绑定。在App.xaml.cs中,添加以下代码:
```csharp
using Caliburn.Micro;
public partial class App : Application
{
private readonly SimpleContainer _container = new SimpleContainer();
public App()
{
InitializeComponent();
}
protected override void Configure()
{
_container.Singleton<CalculationViewModel>();
_container.PerRequest<CalculationView>();
}
protected override object GetInstance(Type service, string key)
{
return _container.GetInstance(service, key);
}
protected override IEnumerable<object> GetAllInstances(Type service)
{
return _container.GetAllInstances(service);
}
protected override void BuildUp(object instance)
{
_container.BuildUp(instance);
}
}
```
在以上代码中,我们使用SimpleContainer类来进行依赖注入。我们使用Singleton方法来创建CalculationViewModel实例,使用PerRequest方法来创建CalculationView实例。然后,我们重写了GetInstance,GetAllInstances和BuildUp方法,以确保在需要时正确地获取和创建实例。
4. 运行项目
现在,我们已经完成了创建ViewModel和View,以及将它们绑定在一起的过程。现在,我们可以运行项目,并在运行时使用UI元素来执行计算。
如果喜欢我的文章,那么
“在看”和转发是对我最大的支持!