我有一个带有扩展器的WPF应用程序,我想在其中更改IsExpanded属性 基于我的视图模型中的枚举值,即我希望扩展器根据以下内容打开或关闭 此枚举属性。我在xaml中使用数据触发器来更新IsExpanded属性, 我的枚举支持属性的值。
<Expander Header="Information and Procedures"
BorderThickness="0"
Margin="5">
<Expander.Style>
<Style TargetType="{x:Type Expander}" BasedOn="{StaticResource MetroExpander}">
<Style.Triggers>
<DataTrigger Binding="{Binding DataContext.Item.Match, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}, Mode=TwoWay}"
Value="{x:Static enum:Match.Multiple}">
<Setter Property="IsExpanded" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.Item.Match, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}, Mode=TwoWay}"
Value="{x:Static enum:Match.None}">
<Setter Property="IsExpanded" Value="True"/>
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.Item.Match, RelativeSource={RelativeSource AncestorType={x:Type UserControl}, Mode=FindAncestor}, Mode=TwoWay}"
Value="{x:Static enum:Match.Exact}">
<Setter Property="IsExpanded" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Expander.Style>
<WrapPanel Orientation="Horizontal" Background="Transparent">
<view:InformationView Margin="0 0 20 0"/>
<view:ProceduresView Margin="0 0 0 0" />
</WrapPanel>
</Expander>
在我们手动扩展扩展器之前,这似乎一直有效。在这之后,好像数据 现在将忽略触发器,并且直到用户将手动更改的IsExpanded属性都不会更改 手动再次打开或关闭扩展器。
我希望用户能够手动展开或关闭它,但是我希望数据触发器具有优先权 在用户输入上方。
注意:我不希望通过IsExpanded属性更改Match的值。匹配项会单独更新,但其值会影响IsExpanded
答案 0 :(得分:2)
这是因为绑定位于selectionChange(option: MatListOption) {
console.log(option.selected);
}
而不是DataTrigger
属性上,因此更改IsExpanded
不会影响IsExpanded
绑定属性。
绑定到DataTrigger
属性,并使用自定义IsExpanded
在源枚举和扩展器布尔之间双向转换。
请参阅:https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.data.ivalueconverter
作为一个很好的副作用,您最终还会得到更短,更易于阅读的XAML。
更新
要获得所需的行为,请在视图模型上为展开状态设置一个布尔属性,该属性与IValueConverter
的{{1}}属性绑定2种方式,并在更改后的视图模型中对其进行更改IsExpanded
属性更改。这样,用户和视图模型都可以修改Expander
的状态。
类似的东西:
Match
答案 1 :(得分:0)
视图模型不应依赖于视图。也就是说,您不应按照Scroog的答案所建议的那样添加IsExpanded属性。
我通过一个Behavior类解决了一个非常类似的问题,该类根据Expander的IsEnabled属性更改IsExpanded。因此,这仅在视图中实现。 下面的类只是一个示例,可以通过添加一个依赖属性来增强该属性,该依赖属性绑定到将使用的视图模型的任何属性,而不是检查IsEnabled。
sql:"default:now()"
并在XAML中用作
"chat_admins" ("id" bigserial, "tg_id" bigint, "created_at" timestamptz NOT NULL DEFAULT now(), PRIMARY KEY ("id"))