使用鼠标双击事件设置启用组合框

时间:2018-12-18 17:36:03

标签: c# wpf xaml

在我的项目中,我有一个多列的ListView,其中包含一个ObservableCollection of People对象。它们的名称,学习区域和其他各种数据构成了每个GridViewColumns。一些GridViewColumns包含一个TextBox,而另一些包含ComboBox。我试图基于其他GridViewColumns之一的MouseDoubleClick事件在locationCmboBx上设置IsEnable属性。下面是有关该区域的XAML代码的片段。

<ListView x:Name="PeopleListView" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,12,0,0" Height="315" Width="560" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding People}">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Name" Width="80">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBox Name="personNameTextBox" Text="{Binding Name, Mode=TwoWay}" IsReadOnly="True" MouseDoubleClick="Control_MouseDoubleClick" Width="80" Background="Transparent" BorderBrush="Transparent"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>

      <! -- More GridViewColumns Here -->

            <GridViewColumn Header="School" Width="70">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <ComboBox Name="locationCmboBx" ItemsSource="{Binding DataContext.SchoolLocations, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Mode=TwoWay}" Loaded="OnCmboBxLoad" Width="55" HorizontalAlignment="Center">
                            <ComboBox.Style>
                                <Style TargetType="{x:Type ComboBox}">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Path=SelectedItem.IsEditable, ElementName=GuardbandListView}" Value="False">
                                            <Setter Property="IsEnabled" Value="False" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </ComboBox.Style>
                        </ComboBox>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
                </GridViewColumn> 

        <! -- More GridViewColumns Here -->   

            </GridView>
        </ListView.View>
    </ListView>

在这里,我具有为ObservableCollection中的每个People对象创建的IsEditable属性,该属性用于填充PeopleListView。当用户双击ListView上一行中的一个单元格时,将设置此属性。当IsEditable设置为true时,locationCmboBx的IsEnabled属性也应该设置为true,以便用户可以更改所选值以及该行中的其他数据。

public bool IsEditable
{
    get { return _IsEditable; }

    set
    {
        if (_IsEditable != value)
        {
            _IsEditable = value;
            RaisePropertyChangedEvent("IsEditable");
        }
    }
}

我的问题是我只希望PeopleListView中的选定行受此事件影响,但是发生的是,如果我有多行,那么每行中的每个ComboBox也会设置为IsEnabled属性。反正这个吗?

1 个答案:

答案 0 :(得分:0)

仅在您要传递其他事件时,才使用以下命令触发双击事件,命令参数。

 <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding MouseDoubleClickCommand}" CommandParameter="{}" />
            </i:EventTrigger>
</i:Interaction.Triggers>