В моем проекте у меня есть многоколонный 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.Во всяком случае вокруг этого?