Wpf 当DataGridTemplateColumn->;ComboBox已更改,而ComboBox绑定与TextColumn不同

Wpf 当DataGridTemplateColumn->;ComboBox已更改,而ComboBox绑定与TextColumn不同,wpf,datagrid,combobox,textbox,datagridtemplatecolumn,Wpf,Datagrid,Combobox,Textbox,Datagridtemplatecolumn,我已经为这个问题挣扎了两个星期了。我搜索了谷歌和Stackoverflow,但似乎找不到正确的答案 通常我不喜欢问问题,除非是绝对必要的,但我真的搞不懂这个问题 问题如下 我有一个带有两个ViewModels的应用程序 其中一个包含可在单独页面上创建的项目列表 当用户返回到主应用程序时,我有一个DataGrid,当我向DataGrid添加一行时,一个组合框列在一列中,该组合框包含来自第一个ViewModel的项 我想做的是,当用户从这个组合框中选择一个项目时,我想让组合框中的值出现在DataGr

我已经为这个问题挣扎了两个星期了。我搜索了谷歌和Stackoverflow,但似乎找不到正确的答案

通常我不喜欢问问题,除非是绝对必要的,但我真的搞不懂这个问题

问题如下

我有一个带有两个ViewModels的应用程序

其中一个包含可在单独页面上创建的项目列表

当用户返回到主应用程序时,我有一个DataGrid,当我向DataGrid添加一行时,一个组合框列在一列中,该组合框包含来自第一个ViewModel的项

我想做的是,当用户从这个组合框中选择一个项目时,我想让组合框中的值出现在DataGrid的当前ViewModel中,并更改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>

我不确定如何将viewmodels设置到表单中,但我倾向于确保每个表单只有一个viewmodel

如果您的组合框使用与datagrid相同的viewmodel,那么您可以在组合框的XAML中使用以下内容:

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


这允许您的组合使用不同于datagrid的
项资源。

我不确定如何将viewmodels设置为表单,但我倾向于确保每个表单只有一个viewmodel

如果您的组合框使用与datagrid相同的viewmodel,那么您可以在组合框的XAML中使用以下内容:

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

这允许您的组合使用与datagrid不同的
ItemsSource