3

私は次の設定をしています:

これがメイン画面です:

    <ListView Name="lineData" Grid.Row="2" ItemsSource="{Binding ElementName=This, Path=LineInformation, ValidatesOnDataErrors=True}" 
              ItemContainerStyle="{StaticResource ItemStyle}" PreviewMouseUp="lineData_PreviewMouseUp" SelectedIndex="0" 
              Foreground="{StaticResource {x:Static SystemColors.ControlTextBrushKey}}">
        <ListView.View>
            <GridView  x:Name="gridViewItems" AllowsColumnReorder="false">
                <GridViewColumn Header="Product" Width="Auto">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <ComboBox Name="descriptionComboBox" Loaded="description_Loaded"
                                    DisplayMemberPath="Description" SelectedItem="{Binding Path=Product}" SourceUpdated="descriptionComboBox_SourceUpdated"
                                    MinWidth="200" Width="Auto" SelectionChanged="description_SelectionChanged" TargetUpdated="descriptionComboBox_TargetUpdated">
                                  <ComboBox.ItemsSource>
                                    <Binding Source="{StaticResource XmlFile}" />
                                  </ComboBox.ItemsSource>
                                </ComboBox>
                            </StackPanel>
                        </DataTemplate>                            
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

この画面には、次のような新しいウィンドウを呼び出すボタンがあります。

        Window newWindow = new Window();
        buildWindow.Owner = this; //MainWindow is the owner
        buildWindow.ShowDialog();

この新しいウィンドウは、次のように最初のウィンドウからコンボ ボックスにある値を除外します。

        XmlDataProvider provider = Owner.FindResource("XmlFile") as XmlDataProvider;
        provider.XPath = _configuration.CreateFilterQuery();
        provider.Refresh();

したがって、コンボボックスにはこの XmlFile へのバインドがあります。私が抱えている問題は、コンボボックスが新しいフィルターのカテゴリに属している場合、コンボボックスに表示された値を保持する必要があることです。

しかし、.Refresh() 関数を呼び出すと、コンボボックスの選択されたインデックスがリセットされます。

XPath クエリを適用した後、表示されたテキストを維持する方法はありますか?

ありがとうございます。それでは、お元気で。

4

2 に答える 2

0

更新前に選択内容を記憶し、新しいフィルターの後に値がまだ存在するかどうかを確認して選択する必要がありますか?

于 2012-05-08T19:00:19.807 に答える
0

子ウィンドウには独自の XmlDataProvider が必要になると思います。たぶん、このようなことをしますか?

        XmlDataProvider provider = Owner.FindResource("XmlFile") as XmlDataProvider;
        XDocument cloneDoc = new XDocument(provider.Document);

        XmlDataProvider childProvider = new XmlDataProvider();
        childProvider.Document = cloneDoc;
        childProvider.XPath = _configuration.CreateFilterQuery();
        childProvider.Refresh();

        Window newWindow = new Window();
        newWindow.Provider = childProvider;
        newWindow.Owner = this; //MainWindow is the owner
        newWindow.ShowDialog();

window をサブクラス化し、その Provider プロパティを追加する必要があります。または、XDocument プロパティを作成して、子ウィンドウ内のすべてをバインドすることもできます。

于 2012-05-09T16:56:27.120 に答える