为什么我的源生成的属性在代码中无法访问?使用 mvvm 工具包

问题描述 投票:0回答:2

您好,获得以下 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 有人有什么想法吗?

wpf asp.net-core mvvm sourcegenerators mvvm-toolkit
2个回答
0
投票

您有旧格式的 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中有两个。


0
投票

如果您必须像我一样坚持使用 .net 4.x,解决方法是您可以使用communitytoolkit.mvvm 在 .net 4.x 类库中创建视图模型,并在主项目中引用它,这样我就不会出现错误访问视图模型的属性。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.