我有一个静态集合:
<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" />
是否可以删除跟踪所选项目的代码,只需在没有参数的情况下启动子窗口?子窗口的标题应该是当前所选MarketDataListener
上的属性“名称”。理想情况下,当所选项目发生更改时,子窗口不会更新。
答案 0 :(得分: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项。
否则,如果您只需要按设计创建一个新窗口,您可以创建一个singelton ViewModel,它将绑定到ListViewSelected项目,每次打开DetailsWindow时,您都将访问此数据。