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

ovfsdjhp  于 2023-03-09  发布在  其他
关注(0)|答案(1)|浏览(151)

你好得到了下面的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等在当前上下文中不存在,Repo:有人知道吗?

jpfvwuh4

jpfvwuh41#

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

相关问题