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

我认为您的子窗口必须拥有自己的 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 回答
0

必须尝试记住刷新之前的选择,然后检查新过滤器后的值是否仍然存在并选择它?

于 2012-05-08T19:00:19.807 回答