级联实现.自动选择子列表中的第一项
本文关键字:一项 实现 选择 列表 级联 | 更新日期: 2023-09-27 18:13:13
我在WPF项目中使用MVVM。我的视图上有两个列表框。第二个ListBox绑定到第一个ListBox的SelectedItem。类似于在选择国家时填充省/州组合框,只使用ListBox代替。
我遇到麻烦的部分是,当用户在第一个框中选择一个新项目时,让第二个ListBox选择其中的第一个项目。
理想情况下,我正在寻找一些XAML的方式来做到这一点,但如果需要的话,我愿意在代码后面扔一些东西。
我的对象在我的视图模型中是这样表示的:
public ObservableCollection<TrafficSignal> TrafficSignals
{
get { return _trafficSignals; }
set
{
_trafficSignals = value;
OnPropertyChanged("TrafficSignals");
}
}
public TrafficSignal SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
相同的对象在我的模型:
public class TrafficSignal
{
public string DataTag { get; set; }
public string FileName { get; set; }
public List<Timing> Timings { get; set; }
}
public class Timing
{
public string Description { get; set; }
...
public List<TimingPhase> TimingPhases { get; set; }
}
public class TimingPhase
{
public string Description { get; set; }
...
}
最后是View的相关部分:
<StackPanel>
<Label>Master List</Label>
<ListBox Name="listTimings"
ItemsSource="{Binding SelectedItem.Timings}"
ItemTemplate="{DynamicResource timingsListTemplate}"
SelectedIndex="0"
/>
<ListBox Name="listPhases"
ItemsSource="{Binding ElementName=listTimings, Path=SelectedItem.TimingPhases}"
ItemTemplate="{DynamicResource phasesListTemplate}"
SelectedIndex="0"
/>
</StackPanel>
您可以设置TargetUpdated
事件处理程序,并像这样选择第一个项目:
<ListBox Name="listPhases"
ItemsSource="{Binding ElementName=listTimings, Path=SelectedItem.TimingPhases,
NotifyOnTargetUpdated=True}"
ItemTemplate="{DynamicResource phasesListTemplate}"
TargetUpdated="OnTargetUpdated"
SelectedIndex="0"
/>
void OnTargetUpdated(object sender, DataTransferEventArgs e)
{
ListBox lb = sender as ListBox;
if (lb != null && lb.HasItems)
{
lb.SelectedIndex = 0;
}
}