所以我有几个ListView
。第一个绑定到ObservaleCollection<ComPort>
。 ComPort
的所有属性都可能需要一些预定义的值。其他ListView
负责该属性:它们显示所有可能的(预定义)值,SelectedItem应该是第一个ObservaleCollection
的ComPort属性的当前值。
我无法附加图片,所以这里是外部图片,它会使情况变得清晰:http://i.stack.imgur.com/ZBRRx.png
<Window.Resources>
<ResourceDictionary x:Name="rd">
<l:ComPorts x:Key="vComPorts"/>
<l:SystemPorts x:Key="vSystemPorts"/>
<l:BaudRates x:Key="vBaudRate"/>
<l:Parities x:Key="vParities"/>
<l:DataBits x:Key="vDataBits"/>
<l:StopBits x:Key="vStopBits"/>
<l:Timeouts x:Key="vTimeouts"/>
<l:ComPort x:Key="vSelectedPort"/>
</ResourceDictionary>
</Window.Resources>
...
<ListView
Name="PortsList"
Grid.Row="1"
Grid.Column="0"
Margin="5"
VerticalAlignment="Stretch"
ItemsSource="{StaticResource vComPorts}"
DataContext="{StaticResource vComPorts}"
SelectedValuePath="PortName"
SelectedValue="{Binding ElementName=SystemPortsList, Path=SelectedItem.Value}"
SelectionChanged="PortsList_SelectionChanged"
MouseDoubleClick="PortsList_MouseDoubleClick">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox />
<TextBlock Margin="5,0,0,0" Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ListView
x:Name="SystemPortsList"
Margin="5"
VerticalAlignment="Stretch"
DataContext="{Binding Source={StaticResource vSelectedPort}}"
ItemsSource="{Binding Source={StaticResource vSystemPortsView}}"
SelectedItem="{Binding Source={StaticResource vSelectedPort}, Path=PortName}"
MouseEnter="SystemPortsList_Refresh"
MouseLeave="SystemPortsList_Refresh"
Grid.Row="1"
Grid.Column="1" SelectionChanged="SystemPortsList_SelectionChanged">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Name="tb" Margin="5,0,0,0" Text="{Binding Path=Name}" />
</StackPanel>
</ListView.ItemTemplate>
</ListView>
我尝试制作类ComPort
的实例,用于保存第一个ListView中所选项目的当前值,但无论如何我无法在没有帮助的情况下处理它。这个任务应该如何解决?
答案 0 :(得分:0)
1)不要在PortsList ListView上处理SelectionChanged,而是将复选框绑定到ListViewItemsPanel,如下所示:
<CheckBox IsChecked={Binding IsSelected, RelativeSource=Parent/>
2)将x:Name添加到第一个ListBox,比如x:Name =&#34; ComPortLB&#34 ;; 3)删除SystemPortsList上的DataContext; 4)修复SystemPortsList上的SelectedItem,如下所示:
SelectedValue="{Binding ElementName=ComPortLB, Path=SelectedValue.PortName}"
我还没有对这些代码进行测试,我暂时没有做过这种事情,所以我为错误道歉,但它应该让你更接近。由于您没有提供足够的信息,我还必须对您的课程做一些假设。