我在WPF中有一个ListBox,我将Code中的ItemsSource属性设置为“List”列表
当我现在运行程序时,我得到一个带有我的类名的List,其中包含了List所包含的内容。多数民众赞成。
现在我隐藏了以下Datatemplate:
<DataTemplate>
<NetworkEditor:NetworkEditor DisplayNetwork="{Binding}"></NetworkEditor:NetworkEditor>
</DataTemplate>
但是对DependencyPropery“DisplayNetwork”总是传递“null”(我用DebugValueConverter对它进行了测试)。
任何想法?
列表框的Xaml:
<ListBox Name="myLst" Grid.Row="3" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch" >
<ListBox.ItemTemplate>
<DataTemplate>
<NetworkEditor:NetworkEditor DisplayNetwork="{Binding}"></NetworkEditor:NetworkEditor>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在我的UserControl中实现属性:
public Network DisplayNetwork
{
get { return (Network)GetValue(DisplayNetworkProperty); }
set { SetValue(DisplayNetworkProperty, value); }
}
// Using a DependencyProperty as the backing store for DisplayNetwork. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DisplayNetworkProperty =
DependencyProperty.Register("DisplayNetwork", typeof(Network), typeof(NetworkEditor), new FrameworkPropertyMetadata(null, OnDisplayNetworkChanged, CoerceValueCallback));
private static Object CoerceValueCallback(DependencyObject d,Object baseValue)
{
return baseValue;
}
永远不会调用OnDisplayNetworkChanged,因为null始终设置为Value!
我的ListBox的数据源:
myLst.ItemsSource = ((S7FunctionBlock) myBlock).Networks;
其中Networks是List,当我调试此Line时,它包含数据!
答案 0 :(得分:2)
如果你在那里设置了DataContext,你有没有检查过你的NetworkEditor:NetworkEditor
类。在一个类中设置DataContext然后尝试从Xaml访问此标签上的DataContext是一个经常犯的错误。将返回父级DataContext。
要检查此项,请尝试将XAML更改为以下内容。
<DataTemplate>
<Grid>
<NetworkEditor:NetworkEditor DisplayNetwork="{Path=DataContext,RelativeSource={RelativeSource,Mode=FindAncestor,AncestorType=Grid}}">
</NetworkEditor:NetworkEditor>
</Grid>
</DataTemplate>
如果有错误,请发表评论,我还没有测试过。然而,正如Will Dean所说,在这种情况下,如果它受你的控制,更改NetworkEditor将是一个好主意。
答案 1 :(得分:1)
正如HCL所说,该控件的DataContext可能不是你想象的那样。
要诊断这一点,您可以将{Binding}更改为{Binding SomethingThatDoesntExist},然后在VS中启用绑定警告。绑定警告消息将告诉您为“SomethingThatDoesntExist”检查了哪种类型的对象 - 您可能会发现它不是您所期望的。
如果事实证明NetworkEditor正在将其DataContext设置为与您的想法不同的东西,那么这个问题的一个很好的解决方案(如果NetworkEditor在您的控制下),就是更改为在第一个对象上设置DataContext在NetworkEditor中(通常是典型UserControl中的Grid),而不是NetworkEditor对象本身。