DataTemplate 似乎没有绑定
DataTemplate doesn't seem to be binding
我正在用绑定模型中的项目填充列表框。在测试时我有这个:
<ListBox x:Name="SettingsHolder" Margin="5,8,5,5" ItemsSource="{Binding AllSettingItems}" Height="380" DisplayMemberPath="Display"/>
通过直接绑定到 ItemsSource 中的项目对象成员,我能够看到我正在正确加载列表框。事实上,'Display' 成员只是我想使用 DataTemplate 显示的成员中的一个 String.Format。一切都很好。定义一个模板应该没什么大不了吧?
所以,然后我定义了我的数据模板。
<Window.Resources>
<DataTemplate x:Key="AllSettingsItemTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="140*"/>
<ColumnDefinition Width="16"/>
<ColumnDefinition Width="16"/>
<ColumnDefinition Width="16"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" DataContext="{Binding Key}"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="1" DataContext="{Binding DevDisplay}"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="2" DataContext="{Binding CertDisplay}"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="3" DataContext="{Binding ProdDisplay}"/>
</Grid>
</DataTemplate>
</Window.Resources>
我删除了 DisplayMemberPath。
我替换为:
ItemTemplate="{DynamicResource AllSettingsItemTemplate}"
现在,没有显示任何值。我可以通过滚动条和可选成员的外观来判断 AllSettingsItem 值是否已绑定,因为我得到了正确的可选项目编号,但没有显示任何内容。就好像没有绑定到项目成员(Key、DevDisplay 等),或者即使绑定了,也没有被渲染。
我试过在数据模板绑定中使用 Path=Key。这是在黑暗中拍摄所以。 . .
秘诀是什么?你怎么调试这样的东西?
(我使用的是 Blend 和 VS2013)。
您没有将 TextBlock
的 Text
绑定到任何东西。尝试这样的事情:
<TextBlock HorizontalAlignment="Left"
TextWrapping="Wrap"
VerticalAlignment="Top"
Grid.Column="1"
Text="{Binding DevDisplay}" />
仅供参考,DataTemplate
的 DataContext
会自动设置为其绑定的项目。
我正在用绑定模型中的项目填充列表框。在测试时我有这个:
<ListBox x:Name="SettingsHolder" Margin="5,8,5,5" ItemsSource="{Binding AllSettingItems}" Height="380" DisplayMemberPath="Display"/>
通过直接绑定到 ItemsSource 中的项目对象成员,我能够看到我正在正确加载列表框。事实上,'Display' 成员只是我想使用 DataTemplate 显示的成员中的一个 String.Format。一切都很好。定义一个模板应该没什么大不了吧?
所以,然后我定义了我的数据模板。
<Window.Resources>
<DataTemplate x:Key="AllSettingsItemTemplate">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="140*"/>
<ColumnDefinition Width="16"/>
<ColumnDefinition Width="16"/>
<ColumnDefinition Width="16"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" DataContext="{Binding Key}"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="1" DataContext="{Binding DevDisplay}"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="2" DataContext="{Binding CertDisplay}"/>
<TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" VerticalAlignment="Top" Grid.Column="3" DataContext="{Binding ProdDisplay}"/>
</Grid>
</DataTemplate>
</Window.Resources>
我删除了 DisplayMemberPath。
我替换为:
ItemTemplate="{DynamicResource AllSettingsItemTemplate}"
现在,没有显示任何值。我可以通过滚动条和可选成员的外观来判断 AllSettingsItem 值是否已绑定,因为我得到了正确的可选项目编号,但没有显示任何内容。就好像没有绑定到项目成员(Key、DevDisplay 等),或者即使绑定了,也没有被渲染。
我试过在数据模板绑定中使用 Path=Key。这是在黑暗中拍摄所以。 . .
秘诀是什么?你怎么调试这样的东西?
(我使用的是 Blend 和 VS2013)。
您没有将 TextBlock
的 Text
绑定到任何东西。尝试这样的事情:
<TextBlock HorizontalAlignment="Left"
TextWrapping="Wrap"
VerticalAlignment="Top"
Grid.Column="1"
Text="{Binding DevDisplay}" />
仅供参考,DataTemplate
的 DataContext
会自动设置为其绑定的项目。