使用 MVVM 处理 UIElement
Handle UIElements with MVVM
我正在构建一个尽可能遵循 MVVM 的应用程序。它是一个 windows 8 商店应用程序,我正在使用 MVVM-light。现在假设我有一个使用 MainViewModel 的 MainPage,还有一个使用 UserViewModel 的 UserControl。
现在我希望能够在不使用任何代码隐藏的情况下在 MainPage 和 UserControl 之间进行通信。在这个简单的场景中,我想从 MainPage
中的按钮 "click" 我的 UserControl
中的一个按钮
MainPage.Xaml:
这里我有一个按钮,我希望用它单击 Usercontroll
中的一个按钮
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="MyButton"
Command="MyCommand"></Button>
</Grid>
MainPageViewModel:
public class MainViewModel : ViewModelBase
{
//
}
UserControll.Xaml
这是我希望从 MainPage
单击的按钮
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="UcButton"/>
</Grid>
UserControlViewModel:
public class UserControlViewModel : ViewModelBase
{
//
}
我有兴趣了解如何与遵循 MVVM 模式的 UI 元素进行交互。任何链接或提示表示赞赏。
执行此操作的 'clean'(MVVM 方式)是让 ViewModel 进行交互。
因此,如果 View1 应调用 View2 中的某些内容,则让 View1 在其 ViewModel1 上触发命令。然后 ViewModel1 应该联系 ViewModel2。 ViewModel2 将执行所需的操作并通过其属性显示结果。 View2 将绑定到属性并显示操作的效果。
ViewModel 之间的交互可以通过发布者-订阅者模型(消息代理、总线等)完成。在 MVVM-light 中,a Messenger class 保持依赖关系清晰。
我积分不够无法发表评论,而且这个问题似乎有点奇怪。您是要单击按钮以使其显示在 GUI 中,例如按钮变为蓝色还是要调用 usercontrolViewModel 中的命令。如果是后者,您可以像这样进行修复:
MainPage.xaml
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="MyButton"
Command="{Binding UserControlViewModel.SomeUserControlCommand, Source={StaticResource Locator}}"></Button>
</Grid>
请记住检查您在 ViewModelLocator 中为 UserControlViewModel 指定的名称,您当然必须创建命令:UserControlViewModel 中的 SomeUserControlCommand。
我正在构建一个尽可能遵循 MVVM 的应用程序。它是一个 windows 8 商店应用程序,我正在使用 MVVM-light。现在假设我有一个使用 MainViewModel 的 MainPage,还有一个使用 UserViewModel 的 UserControl。
现在我希望能够在不使用任何代码隐藏的情况下在 MainPage 和 UserControl 之间进行通信。在这个简单的场景中,我想从 MainPage
UserControl
中的一个按钮
MainPage.Xaml:
这里我有一个按钮,我希望用它单击 Usercontroll
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="MyButton"
Command="MyCommand"></Button>
</Grid>
MainPageViewModel:
public class MainViewModel : ViewModelBase
{
//
}
UserControll.Xaml 这是我希望从 MainPage
单击的按钮 <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="UcButton"/>
</Grid>
UserControlViewModel:
public class UserControlViewModel : ViewModelBase
{
//
}
我有兴趣了解如何与遵循 MVVM 模式的 UI 元素进行交互。任何链接或提示表示赞赏。
执行此操作的 'clean'(MVVM 方式)是让 ViewModel 进行交互。
因此,如果 View1 应调用 View2 中的某些内容,则让 View1 在其 ViewModel1 上触发命令。然后 ViewModel1 应该联系 ViewModel2。 ViewModel2 将执行所需的操作并通过其属性显示结果。 View2 将绑定到属性并显示操作的效果。
ViewModel 之间的交互可以通过发布者-订阅者模型(消息代理、总线等)完成。在 MVVM-light 中,a Messenger class 保持依赖关系清晰。
我积分不够无法发表评论,而且这个问题似乎有点奇怪。您是要单击按钮以使其显示在 GUI 中,例如按钮变为蓝色还是要调用 usercontrolViewModel 中的命令。如果是后者,您可以像这样进行修复:
MainPage.xaml
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Button Content="MyButton"
Command="{Binding UserControlViewModel.SomeUserControlCommand, Source={StaticResource Locator}}"></Button>
</Grid>
请记住检查您在 ViewModelLocator 中为 UserControlViewModel 指定的名称,您当然必须创建命令:UserControlViewModel 中的 SomeUserControlCommand。