我希望从外部类定义窗口的DataContext,以便能够将DI用于我的数据模型。 我已经阅读了一些有关它的教程,但我仍然无法让它一起工作。假设我们有一个简单的数据模型:
class Data
{
public String Value { get; set; }
public Data()
{
Value = "Test";
}
}
当我将数据对象实例化为XAML代码时,数据绑定正确运行:
<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
属性必须从不同的线程设置?
答案 0 :(得分:1)
您可以直接在代码中设置数据:
class Test
{
[@STAThreadAttribute()]
public static void Main(string[] args)
{
MainWindow w = new MainWindow();
w.DataContext = new Data();
w.ShowDialog();
}
}
或者使用Binding,你应该在后面的代码中设置不同的Binding:
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();
}
}
在您的示例中,您将Binding设置为DataContext,这意味着您将不绑定到Data,而是绑定到Binding对象本身。如果您使用Xaml,它会在一定程度上决定您是否使用绑定,并使用后者而不是第一个绑定!
希望这有帮助!