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