我的XAML不会绑定,我看不出原因
使用MVVM,我的MyView.xaml中有以下代码
<Expander Header="{Binding ThresholdName}" IsExpanded="False" >
<properties:PropertiesVm Name="{Binding ThresholdName}" />
</Expander>
这有一个MyViewModel.cs的DataTemplate
如您所见,我正在使用ThresholdName两次。当我运行我的应用程序时,我可以在Header
的{{1}}中看到ThrehsoldName,表明此时的绑定没问题。问题是绑定到我的“属性”对象。
属性视图是
Expander
ViewModel(继承自<Grid>
<TextBlock Text="{Binding Name}" />
</Grid>
)是
DependancyObject
我收到的错误消息是
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement。 BindingExpression:路径=时间;的DataItem = NULL; target元素是'PropertiesVm'(HashCode = 6494098); target属性是'Name'(类型'String')
在我的词典中,我将DataTemplate设置为
public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(PropertiesVm));
public string Name
{
get { return (Convert.ToString(GetValue(NameProperty))); }
set { SetValue(NameProperty, value); }
}
This post建议添加<DataTemplate DataType="{x:Type viewModel:PropertiesVm}">
<view:PropertiesView />
</DataTemplate>
,但这没有帮助
为什么我的Properties ViewModel中的属性x:Name
永远不会被设置?或者我只能用UserControl执行此操作,绑定到后面的代码?
答案 0 :(得分:0)
你有点面子。
您的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>