我正在开发一个使用MVF和WPF的项目,而且我处在一个困难的地方。
当我在按钮更改Button
内容的窗口中创建ContentControl
和ContentControl
时,它可以正常工作。
<Window.Resources>
<me:UserControl1ViewModel x:Key="viewModel" />
</Window.Resources>
<Grid>
<Button Content="Button"
Name="button1"
Command="{Binding Source={StaticResource viewModel}, Path=ClickCommand}" />
<ContentControl Content="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Source={StaticResource viewModel}, Path=View, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" />
</Grid>
但是当我使用按钮创建UserControl并且按钮更改时,ContentControl的内容不起作用。 为什么呢?
<Window.Resources>
<me:UserControl1ViewModel x:Key="viewModel" />
</Window.Resources>
<Grid>
<v:UserControl1 />
<ContentControl Content="{Binding Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Source={StaticResource viewModel}, Path=View, ValidatesOnExceptions=True, NotifyOnValidationError=True, ValidatesOnDataErrors=True}" />
</Grid>
调用ContentControl内容更改的UserControl
<UserControl.Resources>
<me:UserControl1ViewModel x:Key="viewModelA" />
</UserControl.Resources>
<Grid>
<Button Content="Button"
Name="button1"
Command="{Binding Source={StaticResource viewModelA}, Path=ClickCommand}" />
</Grid>
谢谢!
答案 0 :(得分:2)
简单的答案在你的第二个例子中,你将被绑定到两个不同的视图模型。
<Window.Resources>
<!-- View Model Instance #0 -->
<me:UserControl1ViewModel x:Key="viewModel" />
</Window.Resources>
<UserControl.Resources>
<!-- View Model Instance #1 -->
<me:UserControl1ViewModel x:Key="viewModelA" />
</UserControl.Resources>
基本上,您的UserControl和Window不共享相同的视图模型实例,因此不会传播更新。您需要将相同的实例添加到用户控件中。
怎么样:
<!-- Window -->
<v:UserControl1 DataContext="{Binding Source={StaticResource viewModel}}" />
<!-- UserControl1 -->
<Button Content="Button"
Name="button1"
Command="{Binding Path=ClickCommand}" />