【问题标题】:WPF Change DataGridTextColumn when DataGridTemplateColumn->ComboBox changed, while ComboBox binding is different to TextColumn当 DataGridTemplateColumn->ComboBox 更改时,WPF 更改 DataGridTextColumn,而 ComboBox 绑定与 TextColumn 不同
【发布时间】:2011-12-05 18:09:07
【问题描述】:

我已经为这个问题苦苦挣扎了两个星期了。我在 Google 和 Stackoverflow 上进行了全面搜索,但似乎找不到正确的答案。

除非绝对必要,否则我通常不喜欢问问题,但我真的想不通!

问题如下。

我有一个包含两个 ViewModel 的应用程序。

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

当用户返回主应用程序时,我有一个 DataGrid,当我向 DataGrid 添加一行时,一个 ComboBox 列在一个 Column 中,这个 ComboBox 包含来自第一个 ViewModel 的项目。

我想要发生的是,当用户从这个 ComboBox 中选择一个项目时,我希望 ComboBox 中的值到达 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>

【问题讨论】:

    标签: wpf datagrid combobox textbox datagridtemplatecolumn


    【解决方案1】:

    我不确定您是如何为表单设置视图模型的,但我倾向于确保每个表单只有一个视图模型。

    如果您的组合框使用与数据网格相同的视图模型,那么您可以在组合的 XAML 中使用以下内容:

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

    这让您的组合使用与数据网格不同的ItemsSource

    【讨论】:

      猜你喜欢
      • 2010-10-12
      • 1970-01-01
      • 2011-10-28
      • 1970-01-01
      • 2019-09-11
      • 2016-01-21
      • 1970-01-01
      • 2016-11-02
      • 2015-09-14
      相关资源
      最近更新 更多