将视图变量绑定到在视图内部声明的UserControl ViewModel

时间:2018-09-27 15:20:51

标签: c# wpf xaml data-binding

几天以来,我一直陷入这个问题,无法解决:

我有一些视图V1V2,...,视图模型为V1vmV2vm,...,每个视图都使用{{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

我是否瞄准了正确的解决方案? 如何做到这一点?

2 个答案:

答案 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} ... />

V1V2中,我使用bool属性V1vm绑定到V2vm(或其他东西)。我从事财产的获取/设定工作。

MyParam

这很简单而且很简单...