提问人:Buck Hicks 提问时间:11/7/2023 更新时间:11/7/2023 访问量:35
我在多层应用程序中使用 Community.Toolkit.MVVM 中的源生成器时遇到问题
I am having an issue with using Source Generator from the Community.Toolkit.MVVM in a multi tiered application
问:
我正在使用 Microsoft 的社区工具包创建一个多层 WPF 应用程序。我的问题是我想使用工具包中的源生成器,但这要求 ViewModel 位于分部类中。因此,例如,下面的 View 和 ViewModel 的工作方式如下所示。当我的 ViewModel 需要是分部类而不是公共类时,我该如何做同样的事情?
视图:
<Window x:Class="PlantWorks.FirstPart.MainView"
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:v="clr-namespace:PlantWorks.FirstPart"
xmlns:vm="clr-namespace:PlantWorks.Biz.FirstPart;assembly=PlantWorks.Biz"
mc:Ignorable="d"
Title="MainView" Height="450" Width="800">
<Window.DataContext>
<vm:MainViewModel />
</Window.DataContext>
<Grid>
<TextBlock Text="{Binding SampleText}" FontSize="24" />
</Grid>
</Window>
视图模型:
//[ObservableObject]
public class MainViewModel : ObservableObject
{
string sampleText = "Hello World";
//[ObservableProperty] private string sampleText = "Hello World!!!";
public string SampleText
{
get => sampleText;
set
{
if (sampleText == value)
{
return;
}
sampleText = value;
OnPropertyChanged();
}
}
}
答:
2赞
Julian
11/7/2023
#1
您的 ViewModel 可以是:public partial class MainViewModel : ObservableObject
public partial class MainViewModel : ObservableObject
{
[ObservableProperty] private string sampleText = "Hello World!!!";
}
源生成器生成类的其他部分。
您不需要该属性。[ObservableObject]
您仍然可以在 XAML 中引用 ViewModel,因为它已经拥有了。
评论
0赞
Buck Hicks
11/7/2023
这奏效了。现在说得通了,但我不知道你可以做一个公开的部分。
0赞
Julian
11/7/2023
partial
不是访问修饰符,但它可以与任何访问修饰符结合使用,只要分部类的所有部分共享相同的可见性级别:stackoverflow.com/a/25399561/4308455
评论