您好,获得以下 wpf 代码,该代码使用源生成器,利用 mvvm 社区工具包版本 8:
public partial class CalculatorVM : ObservableObject
{
[ObservableProperty]
private int buttonOne = 1;
[ObservableProperty]
private int buttonTwo = 2;
[ObservableProperty]
private int buttonThree = 3;
[ObservableProperty]
private int buttonFour = 4;
[ObservableProperty]
private int buttonFive = 5;
[ObservableProperty]
private int buttonSix = 6;
[ObservableProperty]
private int buttonSeven = 7;
[ObservableProperty]
private int buttonEight = 8;
[ObservableProperty]
private int buttonNine = 9;
[ObservableProperty]
private double result, lastNumber;
[ObservableProperty]
SelectedOperator selectedOperator;
[ObservableProperty]
private int clickedNumber;
[ObservableProperty]
private Label resultLabel;
[RelayCommand]
public void NumbercClicked(int number)
{
var selectedNumber = number switch
{
1 => ButtonOne,
2 => ButtonTwo,
3 => ButtonThree,
4 => ButtonFour,
5 => ButtonFive,
6 => ButtonSix,
7 => ButtonSeven,
8 => ButtonEight,
9 => ButtonNine,
};
ClickedNumber = selectedNumber;
if (ClickedNumber == 0) Result = 0;
else Result = Result + selectedNumber;
}
我无法编译,告诉我 ButtonOne 等在当前上下文中不存在, 回购协议: https://github.com/KostaKing/Calculator/tree/master/Calculator/ViewModels 有人有什么想法吗?
您有旧格式的 csproj。
这些明确列出了属于项目一部分的文件:
<ItemGroup>
<ApplicationDefinition Include="App.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</ApplicationDefinition>
<Compile Include="ViewModels\CalculatorVM.cs" />
<Page Include="MainWindow.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Compile Include="App.xaml.cs">
<DependentUpon>App.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
<Compile Include="MainWindow.xaml.cs">
<DependentUpon>MainWindow.xaml</DependentUpon>
<SubType>Code</SubType>
</Compile>
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
当代码生成器在新格式项目中创建新文件时,该文件将自动包含在项目中。 新风格的项目包括其文件夹中的所有内容。
旧式仅包含 ItemGroup 中列出的内容。
如果正在创建您的部分类,那么这就是它们将被忽略的原因。
您需要将 csproj 升级到新格式。
最简单的方法通常是创建新的解决方案和项目,将源文件复制到旧解决方案中。
如果您确实想要使用新格式 csproj,则可以以 .net 4.8 为目标。为此,请注意您选择的 wpf 项目模板。 vs2022中有两个。
如果您必须像我一样坚持使用 .net 4.x,解决方法是您可以使用communitytoolkit.mvvm 在 .net 4.x 类库中创建视图模型,并在主项目中引用它,这样我就不会出现错误访问视图模型的属性。
希望这有帮助。