记录一下ComboBox在listview中的问题,后面再解决。

在listview的ComboBox,ViewModel类得不到ComboBox的 SelectedModeIndex 和 SelectionChanged事件。

问题描述:

1. 在listview中有ComboBox

2.  数据源类 InspectionInfo ,其中有ComboBox的绑定数据源 ModelList,代码如下:

   public  class InspectionInfo : BindableBase
    {
        /// <summary>
        /// 模式名称列表 
        /// </summary>
        private ObservableCollection<BaseModeOption> _modelList;
        public ObservableCollection<BaseModeOption> ModelList
        {
            get
            {
                return _modelList;
            }
            set
            {
                SetProperty(ref _modelList, value);
            }
        }

        private ExamePartsStat _examePartInfo;
        public ExamePartsStat ExamePartInfo
        {
            get
            {
                return _examePartInfo;
            }
            set
            {
                SetProperty(ref _examePartInfo, value);
            }
        }

        private Inspection _currentInspection;
        /// <summary>
        /// 当前的多项检查
        /// </summary>
        public Inspection CurrentInspection
        {
            get => _currentInspection;
            set
            {
                SetProperty(ref _currentInspection, value);

            }
        }

        private int _selectedModeIndex = 0;

        public int SelectedModeIndex
        {
            get => _selectedModeIndex;
            set => SetProperty(ref _selectedModeIndex, value);
        }

        private DelegateCommand<object> _selectionModeChangedCommand;

        /// <summary>
        /// 模式改变事件
        /// </summary>
        public DelegateCommand<object> SelectionModeChangedCommand =>
            _selectionModeChangedCommand ??= new DelegateCommand<object>(ExecuteSelectionModeChangedCommand);

        /// <summary>
        /// 模式选择改变事件
        /// </summary>
        /// <param name="parameter"></param>
        private void ExecuteSelectionModeChangedCommand(object parameter)
        {
            SharedViewModel shared = DI.Resolve<SharedViewModel>();
            shared.InvokeModeChangedCommand(SelectedModeIndex);

        }
    }

3. ViewModel类,构建了listView的数据源


        private ObservableCollection<InspectionInfo> _inspectionInfoList;

        public ObservableCollection<InspectionInfo> InspectionInfoList
        {
            get => _inspectionInfoList;
            set => SetProperty(ref _inspectionInfoList, value);
        }

4. 页面绑定, ListView 绑定 InspectionInfoList, ComboBox的绑定数据源 ModelList,代码如下:

<ListView Grid.Row="0" Name="ItemList" ItemsSource="{Binding InspectionInfoList}" Background="#515151"  SelectedIndex="{Binding SelectedListItemIndex,Mode=TwoWay}" >
            <ListView.ItemContainerStyle>
                <Style TargetType="ListViewItem">
                    <Setter Property="Margin" Value="0,-40,0,40" />
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="ListBoxItem">
                                <Border Background="{TemplateBinding Background}">
                                    <StackPanel >
                                        <Grid>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="*"/>
                                                <ColumnDefinition Width="150"/>
                                            </Grid.ColumnDefinitions>
                                            <TextBlock Text="{Binding Path=CurrentInspection.RegistrationNo}" Foreground="White" Grid.Row="1" Grid.Column="0"  Grid.ColumnSpan="2" HorizontalAlignment="left" VerticalAlignment="Center"/>
                                            <ComboBox  Style="{StaticResource ComboBoxInPanelStyle}"  ItemsSource="{Binding ModelList}"   SelectedIndex="{Binding SelectedModeIndex,Mode=TwoWay}"  SelectedValuePath="Name"  DisplayMemberPath="Name" Grid.Row="1" Grid.Column="2"  SelectedValue="{Binding SelectedValue,Mode=TwoWay}">
                                                <be:Interaction.Triggers>
                                                    <be:EventTrigger EventName="SelectionChanged">
                                                        <prism:InvokeCommandAction Command="{Binding SelectionModeChangedCommand}"/>
                                                    </be:EventTrigger>
                                                </be:Interaction.Triggers>
                                            </ComboBox>
                                        </Grid>
                                    </StackPanel>
                                </Border>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter Property="Background" Value="#9C71B9" />
                            <Setter Property="Foreground" Value="white" />
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="#1D1D1D" />
                            <Setter Property="Foreground" Value="white" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Background" Value="#757575" />
                            <Setter Property="Foreground" Value="white" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
            <be:Interaction.Triggers>
                <be:EventTrigger EventName="SelectionChanged">
                    <prism:InvokeCommandAction Command="{Binding Path=ListItemChangedCommand}"/>
                </be:EventTrigger>
            </be:Interaction.Triggers>
        </ListView>

5. 问题是 ComboBox的 SelectedModeIndex 和 SelectionChanged  事件只能在InspectionInfo类中的得到,在ViewModel类中得不到。没办法,只能通过事件,在ViewModel中得到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orangapple

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值