代码之家  ›  专栏  ›  技术社区  ›  slaphappy

从控制器代码定义DataContext

  •  0
  • slaphappy  · 技术社区  · 14 年前

    我希望从外部类定义窗口的DataContext,以便能够将DI用于数据模型。 我读了一些关于它的教程,但我仍然不能让它一起工作。假设我们有一个简单的数据模型:

    class Data 
    {
        public String Value { get; set; }
    
        public Data() 
        {
            Value = "Test";
        }
    }
    

    <Window ...>
      <Window.Resources>
        <src:Data x:Key="data" />
      </Window.Resources>
      <Window.DataContext>
        <Binding Source="{StaticResource ResourceKey=data}" />
      </Window.DataContext>
      <Grid>
        <Label Content="{Binding Path=Value}" />
      </Grid>
    </Window>
    

    但是,如果我尝试绑定外部类的数据,窗口将不显示任何内容,并且不会出现错误:

    <Window ...>
      <Grid>
        <Label Content="{Binding Path=Value}" />
      </Grid>
    </Window>
    

    主要课程:

    class Test
    {
        [@STAThreadAttribute()]
        public static void Main(string[] args)
        {
            MainWindow w = new MainWindow();
    
            Binding b = new Binding();
            b.Source = new Data();
            w.DataContext = b;
    
            w.ShowDialog();
        }
    }
    

    DataContext 属性必须从其他线程设置?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Arcturus    14 年前

    您可以直接在代码隐藏中设置数据:

    class Test
    {
        [@STAThreadAttribute()]
        public static void Main(string[] args)
        {
            MainWindow w = new MainWindow();
    
            w.DataContext = new Data();
    
            w.ShowDialog();
        }
    }
    

    或者使用绑定,您应该在代码隐藏中以不同的方式设置绑定:

    class Test
    {
        [@STAThreadAttribute()]
        public static void Main(string[] args)
        {
            MainWindow w = new MainWindow();
    
            Binding b = new Binding();
            b.Source = new Data();
            SetBinding(DataContextProperty, b);
    
            w.ShowDialog();
        }
    }
    

    希望这有帮助!