首先,如果这是一个重复的问题,我很抱歉 - 我已经找了一段时间,但找不到答案。
我们正在使用caliburn.micro,所以解决方案必须使用这个工具。
我们有一个视图,由9个按钮组成,但是并非所有按钮都会同时可见,这取决于系统上的事件。每个按钮的可见性基于当前状态,要么为可见,要么为折叠,但由于按钮数量很大,并且可能在未来增加,我宁愿使用单个函数来完成此操作(接收名称或枚举并返回可见性),而不是将每个按钮绑定到大量属性。
这是一个选项吗?我似乎找不到任何常规方法来做到这一点。
由于事件是从我们正在开发的软件外部接收到的,因此在视图级别执行此操作实际上并不是一个选项(或者至少不是正确的选项)。
编辑:以下是我想修改的视图片段:
正如您所看到的,我需要为每个按钮设置不同的属性,我拒绝相信这是唯一的方法。我确实有一个持有当前状态(电话正在响铃、通话中、拨号等)的属性,并且在VM上轻松地拥有一个函数告诉哪个按钮应该可见,哪个不应该可见。此外,我们目前有9个按钮,但很容易扩展更多,因此我在寻找最模块化的代码。
我们正在使用caliburn.micro,所以解决方案必须使用这个工具。
我们有一个视图,由9个按钮组成,但是并非所有按钮都会同时可见,这取决于系统上的事件。每个按钮的可见性基于当前状态,要么为可见,要么为折叠,但由于按钮数量很大,并且可能在未来增加,我宁愿使用单个函数来完成此操作(接收名称或枚举并返回可见性),而不是将每个按钮绑定到大量属性。
这是一个选项吗?我似乎找不到任何常规方法来做到这一点。
由于事件是从我们正在开发的软件外部接收到的,因此在视图级别执行此操作实际上并不是一个选项(或者至少不是正确的选项)。
编辑:以下是我想修改的视图片段:
<Grid Margin="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<uiviews:PhonePadView Grid.Column="0" x:Name="DestinationDn" cal:Bind.Model="UI.ViewModels.PhonePadViewModel" />
<Button Grid.Column="1" Content="Dial" Style="{StaticResource PhonePadBasicFunctionsButtons}" x:Name="MakeCall" Visibility="{Binding btnMakeCallVisibility}" />
<Button Grid.Column="1" Content="Answer" Style="{StaticResource PhonePadBasicFunctionsButtons}" x:Name="AnswerCall" Visibility="{Binding btnAnswerCallVisibility}" />
<Button Grid.Column="1" Content="Hang-up" Style="{StaticResource PhonePadBasicFunctionsButtons}" x:Name="ReleaseCall" Visibility="{Binding btnReleaseCallVisibility}" />
<Button Grid.Column="1" Content="Hold" Style="{StaticResource PhonePadBasicFunctionsButtons}" x:Name="HoldCall" Visibility="{Binding btnHoldCallVisibility}" />
</Grid>
正如您所看到的,我需要为每个按钮设置不同的属性,我拒绝相信这是唯一的方法。我确实有一个持有当前状态(电话正在响铃、通话中、拨号等)的属性,并且在VM上轻松地拥有一个函数告诉哪个按钮应该可见,哪个不应该可见。此外,我们目前有9个按钮,但很容易扩展更多,因此我在寻找最模块化的代码。
Converter
或MultiValueConverter
来决定可见性呢?如果只有ViewModel可以根据复杂状态来决定这些内容,那么尝试将其减少到一个计算属性或两个计算属性,例如CurrentVisibleButtonGroup
,并将其设置为枚举或数字。基于该属性,使用简单的值转换器来决定哪些按钮应该可见。 - Mat J