共享棱镜视图模型是一种设计模式,用于在不同平台的应用程序中共享业务逻辑和数据模型。棱镜(Prism)是一个用于构建松散耦合、可维护和可测试的XAML应用程序的框架,支持WPF、Xamarin.Forms和其他XAML平台。
以下是一个简单的共享视图模型示例:
// SharedViewModel.cs
using System.ComponentModel;
namespace SharedPrism.ViewModels
{
public class SharedViewModel : INotifyPropertyChanged
{
private string _message;
public string Message
{
get { return _message; }
set
{
_message = value;
OnPropertyChanged(nameof(Message));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
在WPF项目中使用共享视图模型:
<!-- MainWindow.xaml -->
<Window x:Class="WpfApp.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:viewModels="clr-namespace:SharedPrism.ViewModels;assembly=SharedPrism"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<viewModels:SharedViewModel />
</Window.DataContext>
<Grid>
<TextBlock Text="{Binding Message}" FontSize="20" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<Button Content="Change Message" Click="Button_Click"/>
</Grid>
</Window>
// MainWindow.xaml.cs
using Microsoft.Win32;
using SharedPrism.ViewModels;
namespace WpfApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
var viewModel = (SharedViewModel)DataContext;
viewModel.Message = "Hello from WPF!";
}
}
}
在Xamarin.Forms项目中使用共享视图模型:
<!-- MainPage.xaml -->
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:viewModels="clr-namespace:SharedPrism.ViewModels;assembly=SharedPrism"
x:Class="XamarinFormsApp.MainPage">
<ContentPage.BindingContext>
<viewModels:SharedViewModel />
</ContentPage.BindingContext>
<StackLayout VerticalOptions="CenterAndExpand">
<Label Text="{Binding Message}" FontSize="20" HorizontalOptions="CenterAndExpand"/>
<Button Text="Change Message" Clicked="Button_Clicked"/>
</StackLayout>
</ContentPage>
// MainPage.xaml.cs
using SharedPrism.ViewModels;
namespace XamarinFormsApp
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private void Button_Clicked(object sender, System.EventArgs e)
{
var viewModel = (SharedViewModel)BindingContext;
viewModel.Message = "Hello from Xamarin.Forms!";
}
}
}
通过以上方法,可以在WPF和Xamarin.Forms中共享视图模型,提高代码重用性和维护性。
领取专属 10元无门槛券
手把手带您无忧上云