0

在我的程序中,我有一个包含contentPresenter. mainWindow 有一个名为MainWindowViewModel. 此 viewModel 包含绑定到主窗口中的项目的属性。

Content我的contentPresenter由 UserControl->ViewModel->Model 结构表示。

这是contentPresenter我正在使用的 xaml。

MainWindow.xaml:

<ContentPresenter Content="{Binding LeftWidget}" IsEnabled="{Binding LeftWidgetEnabled}" ... />

LeftWidget并且LeftWidgetEnabled都是位于 中的属性MainWindowViewModel。但是,BindingExpression path error我收到的与LeftWidgetEnabled. 出于某种原因,我的程序正在寻找contentPresenterUserControl 的 ViewModel 中的属性。这对我来说没有多大意义,因为该程序LeftWidget正确处理了该属性。

这两个属性都位于MainWindowViewModel,那么为什么程序会在其他地方寻找该LeftWidgetEnabled属性?我怎样才能解决这个问题?

另请注意:我设置DataContextUserControls 的方式是这样的......

<Window.Resources...mainWindow.xaml 中:

<DataTemplate DataType="{x:Type project:LeftWidgetViewModel}">
    <local:LeftWidgetUserControl/>
</DataTemplate>
4

2 回答 2

1

将绑定路径更改为(假设主窗口实际上是一个窗口对象):

IsEnabled={Binding DataContext.LeftWidgetEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}

这有帮助吗?如果是这样,那么您需要检查对象的数据上下文,因为可能还有其他事情发生

此外,LeftWidgetEnabled 的数据类型是否与 IsEnabled 属性所期望的相匹配,即布尔值到布尔值?

于 2013-11-06T03:30:39.117 回答
0

如果 LeftWidget 和 LeftWidgetEnabled 位于相同的数据上下文中并且 LeftWidget 是否正常工作。那么我会说你应该在你的 viemodel 中检查你的属性是否真的是LeftWidgetEnabled

xaml 对我来说看起来不错。

编辑:LeftWidgetEnabled 应该是 bool 类型而不是 bool?

于 2013-11-06T13:28:44.540 回答