刚开始使用WPF / MVVM并且有一个关于使用viewmodel作为wpf窗口的datacontext的问题。
我正在使用视图第一种方法,我的视图看起来像这样;
<Window x:Class="TestContext.TestForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="TestForm" Height="300" Width="300"
DataContext="{StaticResource testViewModel}">
<Grid>
<TextBox Text="{Binding Path=Address}" Height="23" HorizontalAlignment="Left" Margin="34,44,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
</Grid>
</Window>
我在这样的代码中创建了我的viewmodel;
public class ViewModelFactory
{
public TestViewModel CreateTestViewModel()
{
return new TestViewModel();
}
}
我在app.xaml中使用以下方法在我实例化视图时创建viewmodel的实例;
<ObjectDataProvider x:Key="testViewModel" ObjectInstance="{StaticResource viewModelFactory}" MethodName="CreateTestViewModel">
一切正常。
问题是我只看到一次创建的viewmodel。因此视图的新实例使用视图模型的相同实例。
我想开始使用viewmodel的新实例。
如果我在表单构造函数中手动创建视图模型;
public TestForm()
{
InitializeComponent();
this.DataContext = new TestViewModel();
}
然后按预期工作。
我正试图了解这里发生的事情......
...谢谢
答案 0 :(得分:1)
老实说,ObjectDataProvider
使用App
并不是一个好主意,因为每个testViewModel
该实例都是单个的。
但如果你坚持重新创建视图模型,则必须刷新testViewModel.Refresh();
。
您这样做的方式是{{1}}
答案 1 :(得分:0)
是,同意@AngelWPF你应该使用set DataContext作为 View.DataContext = ViewModel;
答案 2 :(得分:0)
您可以在视图的资源部分中实例化视图模型。创建新视图后,您将获得新的视图模型。
此外,您将获得静态绑定,这些绑定有点高效且使用方便,因为您将获得智能化。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfApplication1="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<WpfApplication1:MyViewModel x:Key="ViewModel"/>
</Window.Resources>
<Grid DataContext="{StaticResource ViewModel}">
<ItemsControl ItemsSource="{Binding Data}"/>
</Grid>
</Window>
答案 3 :(得分:0)
在代码中
作为一项规则