【发布时间】:2015-04-30 17:32:03
【问题描述】:
我正在编写一个 WPF 用户控件,它显示一个动态生成的具有多个页面的 TabControl,每个页面又包含一个动态生成的控件列表(文本框、复选框等)。
我想根据用户是否有权查看它们来设置 TextBox、CheckBox 控件的可见性。此权限是每个控件 ViewModel ('VisiblyBy') 上的值的组合,也是整个 UserControl ViewModel ('UserRole') 的属性。我刚刚开始使用 WPF,但标准方法似乎是使用 ValueConvertor - 但是我不明白如何编写一个组合/访问不同属性(VisiblyBy 和 UserRole)的方法,因为它们存在于不同级别在我的 ViewModel 层次结构中。
这是我绑定到 ViewModel 的 XAML 的一部分:
<TabControl ItemsSource="{Binding VariableData.Pages}" SelectedIndex="0">
<!-- this is the header template-->
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" FontWeight="Bold"/>
</DataTemplate>
</TabControl.ItemTemplate>
<!-- this is the tab content template-->
<TabControl.ContentTemplate>
<DataTemplate>
<StackPanel>
<ListBox Grid.IsSharedSizeScope="True"
ItemsSource="{Binding Variables}"
ItemTemplateSelector="{StaticResource templateSelector}">
</ListBox>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button Content="Cancel" />
<Button Content="Submit"
Command="{Binding DataContext.CommitChangesCommand,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type TabControl}}}" />
</StackPanel>
</StackPanel>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
我还需要在未来扩展控制可见性的变量的数量,因为它还取决于它在应用程序中的使用位置。
【问题讨论】:
-
你可以试试 IMultiValueConverter 并使用 Multibinding。