在我的项目中,我有一个多列的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属性。反正这个吗?
答案 0 :(得分:0)
仅在您要传递其他事件时,才使用以下命令触发双击事件,命令参数。
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding MouseDoubleClickCommand}" CommandParameter="{}" />
</i:EventTrigger>
</i:Interaction.Triggers>