Как связать выпадающий список с элементом в виде таблицы данных в wpf?Сам ComboBox является частью Datatemplate - PullRequest
0 голосов
/ 19 июля 2011

У меня есть TabControl, генерирующий некоторые элементы вкладки по шаблону MVVM с использованием WPF. TabControl ItemTemplate, т. Е. Для каждого сгенерированного элемента вкладки, у меня есть комбинированный список, который должен показывать некоторые данные из другого списка. Этот список не совпадает с привязанным объектом самого элемента вкладки.

Например: если табуляция привязана к объекту адреса, в комбинированном окне должны быть показаны данные из списка состояний и состояние, присутствующее в объекте адреса в качестве выбранного элемента.

В поле со списком имеется только один элемент в виде таблицы данных, которая привязана к списку состояний

Проблема в том, что все данные отображаются во всех разделах, но поле со списком просто не отображает данные. Удивительно, но Combobox при извлечении из TabControl DataTemplate работает отлично ...

Ниже приведен код как снаружи, так и внутри 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>

Я попытался выполнить поиск и понял, что проблема связана с привязкой данных в табличке данных, но не смог достичь желаемого результата.

1 Ответ

0 голосов
/ 19 июля 2011

Да, проблема с вашей привязкой.DataContext внутри DataTemplate предназначен для одного элемента (из коллекции, связанной с ItemsSource).Это означает, что вы не можете получить доступ к свойствам, которые находятся непосредственно в самой ViewModel.

Чтобы обойти это, вы можете, например, назвать TabControl и преобразовать ваши привязки внутри DataTemplate для использования привязок ElementName.Другое решение, если ваша ViewModel определена как статический ресурс, это привязать напрямую к ресурсу и использовать путь, чтобы указать свойство, с которым вы хотите связать.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...