WPF изменяет DataGridTextColumn при изменении DataGridTemplateColumn->ComboBox, в то время как привязка ComboBox отличается от TextColumn

Уже две недели бьюсь с этой проблемой. Я искал по всему Google и Stackoverflow, и я не могу найти правильный ответ.

Обычно я не люблю задавать вопросы, если в этом нет крайней необходимости, но я действительно не могу понять этот вопрос!

Проблема заключается в следующем.

У меня есть приложение с двумя ViewModels.

Один содержит список элементов, которые можно создать на отдельной странице.

Когда пользователь возвращается к основному приложению, у меня есть DataGrid, и когда я добавляю строку в DataGrid, ComboBox отображается в столбце, и этот ComboBox содержит элементы из первой ViewModel.

Я хочу, чтобы когда пользователь выбирает элемент из этого ComboBox, я хочу, чтобы значение из ComboBox попадало в текущую ViewModel DataGrid и изменяло значение другого элемента в DataGrid.

В настоящее время у меня настроено следующее, но я все еще не могу заставить его работать.

Я бы предпочел сделать это с помощью прямого XAML, если это возможно.

Очевидно, что следующий XAML не подходит для этой цели.

<DataGrid Style="{StaticResource dataGridStyle}" ItemsSource="{Binding CurrentParser.InputVariables}" AutoGenerateColumns="False" Margin="6,6,35,6" Name="dgInputVarDefs">

<!--
<DataGrid.Triggers>
    <EventTrigger RoutedEvent="ComboBox.SelectionChanged">
    </EventTrigger>
</DataGrid.Triggers>
-->

<DataGrid.Columns>

    <DataGridTextColumn Header="#" Binding="{Binding Path=number}" />
    <DataGridTextColumn Header="Name" Binding="{Binding Path=name}" />

    <DataGridTemplateColumn x:Name="dgtcFormatter" Header="->Formatter">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox 
                    ItemsSource="{Binding Source={StaticResource FormatterViewModel}, 
                    Path=CurrentFormatter.formats}" 
                          x:Name="cbFormatter" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

    <DataGridTemplateColumn x:Name="dgtcFormat" Header="->Format">
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <TextBox x:Name="dgtcFormatTextBox" Text="{Binding Path=format.format}"/>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>

    <DataGridTextColumn Header="Separator" Binding="{Binding Path=separator}" />
    <DataGridTextColumn Header="Preview" Binding="{Binding Path=preview, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"/>
</DataGrid.Columns>
</DataGrid>

person razodactyl    schedule 12.10.2011    source источник


Ответы (1)


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

Если в вашем поле со списком используется та же модель представления, что и в сетке данных, вы можете использовать в XAML следующее:

<ComboBox ItemsSource="{Binding Path=DataContext.myCollection, RelativeSource={RelativeSource    
      Mode=FindAncestor, AncestorType={x:Type Window}}}"/>

Это позволяет вашему комбо использовать другой ItemsSource, чем datagrid.

person Emy    schedule 14.11.2011