Wpf 对从属财产的约束

Wpf 对从属财产的约束,wpf,mvvm,Wpf,Mvvm,我的XAML无法绑定,我不明白为什么 使用MVVM,我在MyView.xaml中有以下代码 <Expander Header="{Binding ThresholdName}" IsExpanded="False" > <properties:PropertiesVm Name="{Binding ThresholdName}" /> </Expander> ViewModel(从DependencyObject继承)是 我收到的错误消息是 Syst

我的XAML无法绑定,我不明白为什么

使用MVVM,我在MyView.xaml中有以下代码

<Expander Header="{Binding ThresholdName}" IsExpanded="False" >
    <properties:PropertiesVm Name="{Binding ThresholdName}" />
</Expander>
ViewModel(从
DependencyObject
继承)是

我收到的错误消息是

System.Windows.Data错误:2:找不到目标元素的治理FrameworkElement或FrameworkContentElement。BindingExpression:路径=时间;DataItem=null;目标元素是“PropertiesVm”(HashCode=6494098);目标属性为“名称”(类型为“字符串”)

在我的字典中,我将DataTemplate设置为

<DataTemplate DataType="{x:Type viewModel:PropertiesVm}">
    <view:PropertiesView />
</DataTemplate>

建议添加
x:Name
,但没有帮助


为什么my Properties ViewModel中的属性
名称
从未设置?或者我只能通过一个用户控件,绑定到代码隐藏来实现这一点吗?

你的脸有点像

您的Expander内容需要绑定到顶级视图模型的属性,该模型公开您的PropertiesVm实例。有点像:

public class TopLevelVm
{
  public string ThresholdName { get; }
  public PropertiesVm Properties { get; }
}
那么您的XAML可能是:

<Expander Header="{Binding ThresholdName}" Content="{Binding }" />

然后DataTemplate将选择相同的DataContext,您的DataTemplate可能如下所示:

<Grid>
    <TextBlock Text="{Binding ThresholdName}" />
    <!-- Do something with .Properties -->
</Grid>


如果我这样做了,我将如何绑定Name属性?是的,对不起…您的视图模型是FrameworkElement还是DependencyObject?…稍微更新了我的答案,认为您只需要稍微扭曲一下您的模型。。。如果要使用具有依赖关系的UserControls,请选中此项Properties@blindmeis,谢谢,这是很好的信息,但我没有在userControl中设置DataContext,它自然地继承了我认为的父项和@blindmeis,同样的问题仍然存在…您的usercontrol中带有DP的绑定应该始终具有ElemenName绑定或RelativeSource绑定。我喜欢第一个。我在你的xaml中看不到这一点。如果您有绑定问题,请使用Snoop。您可以在运行时检查Datacontext。
<Expander Header="{Binding ThresholdName}" Content="{Binding }" />
<Grid>
    <TextBlock Text="{Binding ThresholdName}" />
    <!-- Do something with .Properties -->
</Grid>