我想知道是否可以使用XAML来引用在类后面的代码中创建的实例。
例如:
我有两个clasess,MainWindow
和MainWindow_ViewModel
。
MainWindow
的定义如下:
public partial class MainWindow : Window
{
static public MainWindow wn;
private MainWindow_ViewModel _mwvm;
public MainWindow_ViewModel mwvm
{
get
{
return _mwnm;
}
}
public MainWindow()
{
InitializeComponent();
wn = this;
_mwvm = new MainWindow_ViewModel();
}
}
1)我怎么能在MainWindow.xaml中引用属性MainWindow.wn.mwvm
而不创建MainWindow_ViewModel的新实例(目的是做一些绑定而不用使用DataContext但我需要在整个应用程序中使用相同的MainWindow_ViewModel实例)
2)是否可以从MainWindow.xaml以外的XAML引用同一属性(MainWindow.wn.mwvm
)?
再次感谢所有支持。
答案 0 :(得分:2)
首先应该将窗口的DataContext设置为ViewModel。只有这样才能在MainWindow的XAML中看到它的属性。
示例:
<Window DataContext="{Binding mwvm}">
<TextBlock Text="{Binding PathToYourPropertyInVM} />
</Window>
始终确保您的viewmodel实现INotifyPropertyChanged或使用DependencyProperties作为Bindable属性。用户界面需要这样才能听到&#34;听&#34;到属性值的变化。
如果您想要一个全局可访问的ViewModel,您应该查看ServiceLocator模式。所有MVVM框架都为您实现(MVVMLight,Caliburn等)。它基本上由一个类来注册你的组件,并在需要时处理所有的instatiation。您应该对该主题进行一些研究,因为它相当广泛且难以提出单一答案。
希望这会有所帮助;)
答案 1 :(得分:1)
要在app.xaml中实例化您的类:
xmlns:myApp="clr-namespace:WpfApplication1"
<myApp:MainWindow_ViewModel x:Key="mwvm" />
使用示例:
<TextBlock Text="{Binding Source={StaticResource mvvm}, Path=A_PROPERTY}"/>