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

时间:2015-11-19 15:57:35

标签: c# wpf xaml

我有两个clasess,MainWindowMainWindow_ViewModel

MainWindow的定义如下:

public partial class MainWindow : Window
{
    static public MainWindow wn;
    public MainWindow_ViewModel mwvm;

    public MainWindow()
    {
        InitializeComponent();
        wn = this;
        mwvm = new MainWindow_ViewModel();
    }
}

MainWindow_ViewModel的定义如下:

class MainWindow_ViewModel
{
    private List<String> _filtros;
    public List<String> filtros
    {
        get
        {
            return _filtros;
        }
    }


    public MainWindow_ViewModel()
    {
        _filtros = new List<String>();
        _filtros.add("Filtro1");
        _filtros.add("Filtro2");
        _filtros.add("Filtro3");
    }
}

请注意,没有任何静态方法或属性。

在MainWindow的XAML中,我有一个ListBox,我想与mwvm.filtros绑定,它应该可以从代码隐藏中直接使用。

  1. 如何在不使用DataContext且仅在XAML中实现这一目标?
  2. 是否可以从另一个类(即另一个窗口)绑定到以下路径? MainWindow.wn.mwvm.filtros

1 个答案:

答案 0 :(得分:2)

是的,当然。您不需要C#代码来绑定视图模型。只需在DataContext元素中创建一个对象:

<Window.DataContext>
   <local:MainWindow_ViewModel />
</Window.DataContext>

您必须为本地项目创建命名空间。完整代码:

<Window x:Class="Your.Namespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:Your.Namespace"
>
    <Window.DataContext>
        <local:MainWindow_ViewModel />
    </Window.DataContext>

除非您传递它或使其静止,否则您无法绑定其他WindowControl。如果它是此Window的子控件,则可以设置其数据上下文。