我有一个TabControl使用WPF在MVVM模式之后生成一些选项卡项。 TabControl ItemTemplate即对于生成的每个选项卡项,我有一个组合框,应该显示来自不同列表的一些数据。 此列表与制表符项本身的绑定对象不同。
例如:如果tabitem绑定到地址对象,则组合框应显示状态列表中的数据,并将地址对象中显示的状态显示为所选项目。
组合框只有一个项目作为数据网格绑定到状态列表
问题是所有数据都显示在所有部分中,但组合框根本不会显示数据。令人惊讶的是,从TabControl DataTemplate中取出时的Combobox工作正常......
下面是tabcontrol外部和内部的代码。请一些建议!!!
------这个在Tabcontrol之外并且完美地运作--------------
<ComboBox SelectedValue="{Binding SelectedState}" HorizontalAlignment="Left" VerticalAlignment="Center" IsEditable="True" Margin="50,55,0,61" Height="27" Width="193">
<ComboBoxItem TextSearch.Text="{Binding SelectedState}">
<ContentControl>
<DataGrid SelectedIndex="{Binding StateSelectedIndex}" ItemsSource="{Binding StateData}" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" cal:Message.Attach="[Event SelectionChanged] = [Action SelectionChanged]">
<DataGrid.Columns>
<DataGridTextColumn Header="StateName" Binding="{Binding StateName}" />
</DataGrid.Columns>
</DataGrid>
</ContentControl>
</ComboBoxItem>
</ComboBox>
----这个位于TabControl ---------
中 <TabControl Margin="3,3,0,0" HorizontalAlignment="Left" Width="752" Height="255" VerticalAlignment="Top" Grid.ColumnSpan="2" Grid.Row="1" ItemsSource="{Binding Addresses}" SelectedIndex="{Binding WhichAddressTab}" >
<TabControl.ItemContainerStyle>
...................................
</TabControl.ItemContainerStyle>
<TabControl.ContentTemplate>
<DataTemplate>
<ContentControl>
..........................
<ComboBox SelectedValue="{Binding SelectedState}" HorizontalAlignment="Left" VerticalAlignment="Center" IsEditable="True" Margin="108,3,0,1" Grid.ColumnSpan="3" Grid.Row="1" Width="147">
<ComboBoxItem TextSearch.Text="{Binding SelectedState}" >
<ContentControl>
<DataGrid SelectedIndex="{Binding StateSelectedIndex}" ItemsSource="{DynamicResource StateData}" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" VerticalAlignment="Top" Width="200" cal:Message.Attach="[Event SelectionChanged] = [Action SelectionChanged]">
<DataGrid.Columns>
<DataGridTextColumn Header="StateName" Binding="{Binding StateName}" />
</DataGrid.Columns>
</DataGrid>
</ContentControl>
</ComboBoxItem>
</ComboBox>
...........................
</Grid>
</ContentControl>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
我尝试过搜索并且已经理解问题在于数据模板中的数据绑定,但是无法实现所需的结果。
答案 0 :(得分:0)
是的,问题出在你的绑定上。 DataTemplate内部的DataContext用于单个元素(从绑定到ItemsSource的集合)。这意味着您无法访问直接在ViewModel本身上的属性。
要解决此问题,您可以将TabControl命名为示例,并将DataTemplate内的绑定转换为使用ElementName绑定。如果将ViewModel定义为静态资源,则另一种解决方案是直接绑定到资源,并使用Path指定要绑定的属性。
希望这会有所帮助:)