WPF Изменить DataGridTextColumn, когда DataGridTemplateColumn-> ComboBox изменился, а привязка ComboBox отличается от TextColumn - PullRequest
1 голос
/ 12 октября 2011

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

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

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

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

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

Когда пользователь возвращается к основному приложению, у меня есть 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>

1 Ответ

1 голос
/ 14 ноября 2011

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

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

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

Это позволяет вашей комбинации использовать ItemsSource, отличную отрешетка данных.

...