Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 声明视图+;ViewModel作为内部_C#_Wpf_Mvvm - Fatal编程技术网

C# 声明视图+;ViewModel作为内部

C# 声明视图+;ViewModel作为内部,c#,wpf,mvvm,C#,Wpf,Mvvm,不知何故,我遇到了一个我无法理解的问题 假设我们有一个观点: public partial class TestView : UserControl { public TestView(TestViewModel vm) { InitializeComponent(); DataContext = vm; } } 以及注入的ViewModel: class TestViewMod

不知何故,我遇到了一个我无法理解的问题

假设我们有一个观点:

public partial class TestView : UserControl
    {
        public TestView(TestViewModel vm)
        {
            InitializeComponent();

            DataContext = vm;
        }
    }
以及注入的ViewModel:

 class TestViewModel
{
    public TestViewModel()
    {

    }
}
这在逻辑上会导致错误:

可访问性不一致:参数类型“TestViewModel”较少 比方法“TestView.TestView”更易访问

因此,当我想将视图和ViewModel声明为内部视图时:

internal class TestViewModel
    {
        internal TestViewModel()
        {

        }
    }
这项工作:

partial class TestView : UserControl
    {
        TestView(TestViewModel vm)
        {
            InitializeComponent();

            DataContext = vm;
        }
    }
但这并不是:

internal partial class TestView : UserControl
    {
        internal TestView(TestViewModel vm)
        {
            InitializeComponent();

            DataContext = vm;
        }
    }

<强>为什么?< /强>

您会得到一个错误,因为XAML认为您的类是公共的,因为您的代码后面称它是“代码>内部< /代码>。将此添加到xaml
x:ClassModifier=“internal”


出现了什么错误?'TestView'的部分声明具有冲突的可访问性修饰符。但是在哪里,为什么?我认为一个类在没有修饰符的情况下是自动内部的。如果你想知道原因,有很多类似的问题。这不是我问题的答案。
internal
修饰符应该是可选的,但是如果我更改它会导致错误。谢谢您的回答!但是为什么它在没有任何修改器的情况下工作呢?这不应该和
internal
一样吗?@JohannesWanzek默认情况下是的
x:ClassModifier
在XAML中是公共的,但是在我的代码中我没有声明任何修饰符,这意味着默认情况下它应该是内部的:是的,你是对的。如果您不在xaml中声明,它后面的代码将是内部的
<UserControl x:Class="YourNamespace.TestView " x:ClassModifier="internal"