几天以来,我一直陷入这个问题,无法解决:
我有一些视图V1
,V2
,...,视图模型为V1vm
,V2vm
,...,每个视图都使用{{1} } UserControl
,以及视图模型MyUC
。 UserControl MyUCvm
取决于附加的MyUC
属性bool
。假设视图myParam
通过CheckBox定义了值。我可以将V1
绑定到myParam
XAML中的CheckBox.IsChecked
:
V1
在视图模型<UserControl x:Class="V1" ...>
...
<CheckBox x:Name="cb" />
<MyUC local:MyUC.myParam="{Binding ElementName=cb, Path=IsChecked}" />
</UserControl>
中,我声明了一个属性:
MyUCvm
我希望将public class MyUCvm : ViewModelBase
{
private bool _condition;
public bool Condition
{
get { return condition; }
set
{
_condition = value;
Notify("Condition");
}
}
...
}
绑定到Condition
,以便myParam
在视图MyUC
中显示的内容取决于复选框V1
(以及其他模式)对于其他视图)。
也许我可以在cb
中编写C#中V1vm
的更新。但是我认为这不是正确的方法。
对我来说,用某种(不起作用的)代码将MyUCvm
XAML中的myParam
绑定到MyUC
更加“纯粹”:
Condition
我是否瞄准了正确的解决方案? 如何做到这一点?
答案 0 :(得分:0)
当您需要一个自定义控件绑定到另一个控件的属性时,最好的解决方案是在具有绑定属性需要公开的自定义控件后面的代码中注册依赖项属性。
当然,您仍然可以从已注册的依赖项属性的get和set中获取和设置viewModel可绑定属性。但是,这将是您最好的选择。
因此,请为您的控制器类型创建一个DependencyProperty,为其命名,并在需要监视代码时注册onChanged。然后为其创建get和set属性,以将依赖项属性指向。
从他们那里,编译并重新打开试图利用它的xaml文件,该属性现在将存在于自动填充的智能感知中,供您绑定。
快乐编码。
答案 1 :(得分:0)
实际上,我选择使用简单得多的ViewModel逻辑,而不是将所有内容弄乱。
在ViewModels rm -rf /var/cache/apk/*
和V1vm
中,我定义了类型V2vm
的属性,该属性用于定义视图{中的MyUCvm
xaml元素的DataContext
{1}}和<local:MyUC DataContext={Binding RefToMyUCvm} ... />
。
在V1
和V2
中,我使用bool属性V1vm
绑定到V2vm
(或其他东西)。我从事财产的获取/设定工作。
MyParam
这很简单而且很简单...