0

我有一个静态集合:

<CollectionViewSource Source="{Binding Source={x:Static Application.Current}, Path=MarketDataListeners}" x:Key="ficServerMarketDataView"></CollectionViewSource>

这是一个类型的集合MarketDataListener。我有一个绑定到此集合的 ListView 和一个绑定到此 ListView 的选定项的 ContentControl。在 ContentControl 中,我有一个启动子窗口的按钮(在后面的代码中)。

我正在做的是跟踪主窗口中的选定项目,如下所示:

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  _selectedItem = ((sender as ListView).SelectedValue as MarketDataContainer);
}

然后当单击控制控件中的按钮时,我执行:

private void ShowComponentsButton_Click(object sender, RoutedEventArgs e)
{
    var detailsWindow = new ComponentWindow(_selectedItem);
    var button = sender as Button;
    if (button == null) return;
    detailsWindow.Show();
}

这是 ContentControl 的绑定:

        <ContentControl Name="Detail" Content="{Binding Source={StaticResource ficServerMarketDataView}}"
        ContentTemplate="{StaticResource detailsFicTemplate}" VerticalAlignment="Stretch" Foreground="Black" DockPanel.Dock="Bottom" />

是否可以删除跟踪所选项目的代码,只需在没有参数的情况下启动子窗口?子窗口的 Title 应该是当前选中的 'Name' 属性MarketDataListener。理想情况下,当所选项目更改时,子窗口不会更新。

4

1 回答 1

0

Is it possible to remove the code tracking the selected item just launch the child window without a parameter?

我强烈建议您在同一窗口中显示详细信息,
从用户体验的角度来看,这将是可取的。您可以使用页面或 contentControl 来显示 detailsWindow 数据。在这种情况下,很容易实现您正在寻找的东西,您所要做的就是将 ContentControl.dataContext 绑定到 listviewSelected 项目。

否则,如果您只需要按设计创建一个新窗口,则可以创建一个绑定到 ListViewSelected Item 的单视图模型,并且每次打开 DetailsWindow 时都将访问此数据。

于 2013-06-12T18:40:18.667 回答