Включение ComboBox с помощью события двойного щелчка мыши - PullRequest
0 голосов
/ 18 декабря 2018

В моем проекте у меня есть многоколонный ListView, который содержит ObservableCollection of People объектов.Их имена, области обучения и другие различные данные образуют каждый из столбцов GridViewColumns.Некоторые из GridViewColumns содержат TextBox, а другие содержат ComboBox.Я пытаюсь установить свойство IsEnable для locationCmboBx на основе события MouseDoubleClick от одного из других GridViewColumns.Ниже у меня есть фрагмент кода 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>

Здесь у меня есть свойство IsEditable, которое я создал для каждого объекта People в ObservableCollection, используемого для заполнения PeopleListView.Это свойство устанавливается, когда пользователь дважды щелкает одну из ячеек в строке в ListView.Когда IsEditable имеет значение true, свойство IsEnabled для locationCmboBx должно быть также установлено в значение true, что позволяет пользователю изменять выбранное значение вместе с другими данными в строке.

public bool IsEditable
{
    get { return _IsEditable; }

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

Моя проблема в том, что яЯ хочу, чтобы это событие затронуло только выбранную строку в PeopleListView, но происходит то, что если у меня несколько строк, то каждый ComboBox в каждой строке получает также свой набор свойств IsEnabled.Во всяком случае вокруг этого?

1 Ответ

0 голосов
/ 19 декабря 2018

Используйте следующее, чтобы вызвать событие двойного щелчка, Параметры команды, только если вы хотите передать что-либо еще, удалите его.

 <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick">
                <i:InvokeCommandAction Command="{Binding MouseDoubleClickCommand}" CommandParameter="{}" />
            </i:EventTrigger>
</i:Interaction.Triggers>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...