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