如何绑定到XAML中实例化类的属性

时间:2015-11-20 16:20:13

标签: c# wpf xaml

我想知道是否可以使用XAML来引用在类后面的代码中创建的实例。

例如: 我有两个clasess,MainWindowMainWindow_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)?

再次感谢所有支持。

2 个答案:

答案 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中实例化您的类:

  1. 在app.xaml
  2. 中添加命名空间

    xmlns:myApp="clr-namespace:WpfApplication1"

    1. 创建班级的对象
    2. <myApp:MainWindow_ViewModel x:Key="mwvm" />

      使用示例:

      <TextBlock Text="{Binding Source={StaticResource mvvm}, Path=A_PROPERTY}"/>