gpt4 book ai didi

data-binding - 根据 ViewModel 的属性在 View 中的 UserControl 之间切换

转载 作者:行者123 更新时间:2023-12-03 10:21:38 27 4
gpt4 key购买 nike

在 Windows 8 商店应用程序中,如何根据 ViewModel 的属性在 View 中的 UserControls 之间进行更改?

假设我的 ViewModel 有一个看起来像这样的属性:

    class MyViewModel
{
public string CurrentStatus
{
get { return (string)GetValue(CurrentStatusProperty); }
set { SetValue(CurrentStatusProperty, value); }
}

public static readonly DependencyProperty CurrentStatusProperty =
DependencyProperty.Register("CurrentStatus", typeof(string), typeof(MyViewModel), new PropertyMetadata("default", CurrentStatusChanged));


...
}

如何根据 CurrentStatus 的值使我的 View 更改为 UserControl从 View 模型?

对我来说,最直接的解决方案是在 CurrentStatus 之间创建一个绑定(bind)。来自 ViewModel 和来自 View 的另一个字符串,但显然数据绑定(bind)只能用于 DependencyObject (字符串不是)。

编辑 :
xaml 文件只包含一个 StackPanel我想在其中放置 UserControl ,基于当前状态。所以,如果 CurrentStatus"one"我想要 StackPanel包含 UserControlOne 等等......

对这个问题有什么想法或好的解决方案吗?

非常感谢!

最佳答案

我通常使用 ContentControl并将其设置为 ContentTemplate基于 DataTrigger
我的博文中有一个例子 Switching between Views/UserControls using MVVM ,但这是使用您的方案可能看起来像的示例:

<DataTemplate x:Key="DefaultTemplate">
<local:DefaultUserControl />
</DataTemplate>

<DataTemplate x:Key="ClosedTemplate">
<local:ClosedUserControl />
</DataTemplate>

<Style x:Key="MyContentControlStyle" TargetType="{x:Type ContentControl}">
<Setter Property="ContentTemplate" Value="{StaticResource DefaultTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding CurrentStatus}" Value="Closed">
<Setter Property="ContentTemplate" Value="{StaticResource ClosedTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>

...

<ContentControl Style="{StaticResource MyContentControlStyle}" />

编辑

显然,WinRT 不支持 DataTriggers,并已被 VisualStateManager 替换。 .我还没有机会使用它,但是根据我的阅读,他们对 WinRT 使用了与 Silverlight 相同的方法(直到 v5 才支持 DataTriggers),我对 Silverlight 的解决方案是使用 DataTemplateSelector

我希望这可以为您指明正确的方向:)

关于data-binding - 根据 ViewModel 的属性在 View 中的 UserControl 之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138917/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com