【发布时间】:2020-08-26 20:02:43
【问题描述】:
我有一个 UserControl,它接收来自 xaml 的参数,如下所示:
<components:MyComponent Sex="MALE"/>
在 MyComponent 控件中,我有一个这样绑定的 ViewModel:
<UserControl.DataContext>
<components:MyComponentViewModel/>
</UserControl.DataContext>
另外在MyComponent后面的代码是这样的:
public partial class MyComponent: UserControl
{
public string Sex
{
get => (string)GetValue(SexParamProperty);
set { SetValue(SexParamProperty, value); }
}
public static readonly DependencyProperty SexParamProperty = DependencyProperty.Register(nameof(Sex), typeof(string), typeof(MyComponent));
public MyComponent()
{
InitializeComponent();
}
}
MyComponentViewModel 如下所示:
public class MyComponentViewModel: ViewModelBase
{
public string Sex { get; set; }
}
我希望 ViewModel 知道 UserControl 中 Sex 的值是什么。这是违反 MVVM 模式还是有办法做到这一点尊重 MVVM?我该怎么做?
【问题讨论】:
-
命名错误。如果 Poeporty 命名为
SexDP 必须命名为SexProperty。如果 DP 命名为SexParamProperty,则属性必须命名为SexParam。然后你可以绑定它Sex="{Binding SexInVM}",其中SexInVM是外部ViewModel的属性。 -
...它根本不需要
MyComponentViewModel。