如何解决WPF:基于模型视图属性禁用ListViewItem
因此,我的ModelView
属性在我的应用程序执行我的工作时已更改:
private bool isPlay;
public bool IsPlay
{
get { return isPlay; }
set
{
isPlay = value;
NotifyPropertyChanged("IsPlay");
}
}
当这个IsPlay
是True
时,我想要我的ListViewItem
IsEnabled = False
,所以这是我的Style
我的ListView
,使用:
<Style TargetType="{x:Type ListView}">
<Setter Property="TextBlock.TextAlignment" Value="Center"/>
<Setter Property="Margin" Value="5"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="SelectionMode" Value="Single"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/>
<Setter Property="ScrollViewer.CanContentScroll" Value="True"/>
<Setter Property="AlternationCount" Value="2"/>
<!-- ListViewItem -->
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Height" Value="32"/>
<Setter Property="BorderBrush" Value="transparent"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="HorizontalContentAlignment" Value="Left"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<!--<Setter Property="IsSelected" Value="{Binding IsSelected}" />-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<GridViewRowPresenter Content="{TemplateBinding Content}"
Columns="{TemplateBinding GridView.ColumnCollection}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding Path=IsPlay}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="Gray" Opacity="0.1"/>
</Setter.Value>
</Setter>
<Setter Property="IsEnabled" Value="False"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Setter.Value>
</Setter>
</Style>
问题是ListViewItem
IsEnabled
未被更改,因此我将此IsPlay
属性绑定到某些TextBlock
中以查看其状态是否正确更改({{1} }到True
,反之亦然),但我的False
ListView
不能正常工作。
更新
这里声明了我的Style
(仅一个实例):
View Model
解决方法
ListViewItem.DataContext
绑定到列表中的数据项,因此您不能直接访问ListView
级别上存在的属性。
在这种情况下,您可以使用相对绑定:
<Condition Binding="{Binding DataContext.IsPlay,RelativeSource={RelativeSource AncestorType=ListView,Mode=FindAncestor}}" Value="True"/>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。