我的 ResultView 中有一个带有六个选项卡的 TabControl。位于此视图后面的 ViewModel 可以是 ResultTypeOneViewModel 或 ResultTypeTwoViewModel,它们均派生自 ResultViewModel,但您可以将结果查看器与任一结果类型互换使用。
不同之处在于,在 ResultTypeOneViewModel 中,选项卡 1 和 3 需要可见,其余部分需要隐藏。
在 ResultTypeTwoViewModel 中,选项卡 2、3、4、5、6 需要可见,选项卡 1 需要隐藏。
我想通过类似的方式做到这一点
<TabItem Name="1" Visibility={Binding IsTabVisible(0)}>
<TabItem Name="2" Visibility={Binding IsTabVisible(1)}>
<TabItem Name="3" Visibility={Binding IsTabVisible(2)}>
etc...
并在 ResultsViewModel 中有一个抽象方法声明,例如
public abstract Visibility IsTabVisible(int index);
在 ResultsOneViewModel 中有
public override Visibility IsTabVisible(int index)
{
if (index == 0 || index == 2) return Visibility.Visible;
return Visibility.Hidden;
}
在 ResultsTwoViewModel 中有
public override Visibility IsTabVisible(int index)
{
if (index == 0) return Visibility.Hidden;
return Visibility.Visible;
}
但我无法弄清楚如何通过 WPF XAML 中的绑定使用参数调用这样的方法。
任何人都可以建议我如何做到这一点,或者如果通过这种方法不可能,我可以通过另一种方式解决这个问题?
要直接回答您的问题,您可以使用ObjectDataProvider
为您调用一个方法,以便您可以处理结果:
xmlns:System="clr-namespace:System;assembly=mscorlib"
xmlns:Windows="clr-namespace:System.Windows;assembly=PresentationCore"
...
<Window.Resources>
<ObjectDataProvider x:Key="IsTab1VisibleMethod"
ObjectType="{x:Type Windows:Visibility}" IsAsynchronous="True"
MethodName="IsTabVisible">
<ObjectDataProvider.MethodParameters>
<System:Int32>0</System:Int32>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
然后您应该能够像这样访问结果(但是您需要为每个TabItem
):
<TabItem Visibility="{Binding Source={StaticResource IsTab1VisibleMethod}}" />
然而,操作 UI 属性(例如Visibility
在代码中,所以更好的想法是使用BooleanToVisibilityConverter
to Bind
the Visibility
属性到bool
@Highcore 建议的值。您可以在以下位置查看此示例将按钮可见性绑定到 ViewModel 中的 bool 值 https://stackoverflow.com/questions/7000819/binding-a-button-visibility-to-bool-value-in-viewmodel在 StackOverflow 上发布。
在我看来,更好的解决方案是简单地为每个视图模型提供一个视图。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)