1

私はこの問題に2週間苦労しています。Google と Stackoverflow 全体を検索しましたが、正しい答えが見つからないようです。

絶対に必要な場合を除き、通常は質問をしたくありませんが、これは本当にわかりません!

問題は次のとおりです。

2 つの ViewModel を持つアプリケーションがあります。

1 つには、別のページで作成できるアイテムのリストが含まれています。

ユーザーがメイン アプリケーションに戻ると、DataGrid があり、DataGrid に行を追加すると、ComboBox が列にリストされ、この 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>
4

1 に答える 1

1

ビューモデルをフォームにどのように設定しているかはわかりませんが、フォームごとにビューモデルを 1 つだけ持つようにする傾向があります。

コンボボックスがデータグリッドと同じビューモデルを使用している場合、コンボの XAML で次を使用できます。

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

これにより、コンボでデータグリッドとは異なるItemsSourceものを使用できます。

于 2011-11-14T10:29:25.657 に答える