【发布时间】:2014-06-25 14:13:16
【问题描述】:
似乎是一项微不足道的任务:我正在构建一个 wpf 应用程序,使用 MVVM 模式。我想要的是动态更改视图的一部分,使用不同的用户控件,取决于用户输入。
假设我有 2 个用户控件,一个带有按钮,另一个带有标签。 在主视图中,我有一个容器。遵循 XAML“作品”:
<GroupBox Header="container" >
<local:UserControlButton />
</GroupBox>
然后弹出一个带有按钮的 UserControl 元素。如果我将其更改为另一个,它也可以。 问题是如何动态地提供该组框。如果我在我的模型视图中放置类似的东西:
private UserControl _myControl;
public UserControl MyControl
{
get
{
return _myControl;
}
set
{
_myControl= value;
InvokePropertyChanged("MyControl");
}
}
并将我的视图 XAML 更改为:
<GroupBox Header="container" >
<ItemsControl ItemsSource="{Binding MyControl}" />
</GroupBox>
并使用用户控件为按钮或标签从命令中输入它:尽管“MyControl”变量已设置并且“调用属性已更改”,但什么也没有发生。..
【问题讨论】:
-
MVVMLight Using Two Views 通读一遍。它解释了基本概念。之后将其应用于您的案例应该很简单。顺便说一句,不确定
model view是什么意思。你的意思是ViewModel?如果是这样,您首先不会在 VM 中拥有 UI 元素。通读链接的文章,可能还有以前的文章以提供帮助 -
请参阅我对Navigating through multiple child views contained in Main Window 问题的回答。虽然它与您的示例不完全相同,但您仍然应该能够按照那里的建议来满足您的要求。
-
@Sheridan +1 我正要链接到你的答案...
-
谢谢,我的朋友。我打算把这个问题作为那个问题的副本来结束,但你知道这些用户是什么样的......它与我的问题不完全相同......
-
@Netscape,是的,我们不应该在视图模型中有任何与 UI 相关的类,但这实际上取决于您的应用程序的专业程度。如果你有一个专业的应用程序,那么你可能有一套单元测试,然后在视图模型中有 UI 元素会导致问题。但是,如果您只是粗略地遵循 MVVM 方法,因为它只是让使用 WPF 更容易而且它不是一个大型应用程序,那么它真的 无关紧要。这有点像将您的数据访问类放在一个单独的项目中......只有在专业应用程序中才真正需要。
标签: c# wpf xaml mvvm user-controls