내 데이터 모델에 DI를 사용할 수 있도록 외부 클래스에서 내 윈도우의 DataContext를 정의하고 싶습니다. 자습서를 읽었지만 함께 사용할 수는 없습니다. 내가 XAML 코드로 데이터 오브젝트를 실체화 할 때컨트롤러 코드에서 DataContext 정의
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>
그리고 메인 클래스 :
을나는 뭔가를 놓친가요? 어쩌면 DataContext
속성을 다른 스레드에서 설정해야합니까?
class Test
{
[@STAThreadAttribute()]
public static void Main(string[] args)
{
MainWindow w = new MainWindow();
w.DataContext = new Data();
w.ShowDialog();
}
}
을 또는 바인딩을 사용하고 뒤에 코드에서 다르게 바인딩을 설정해야합니다 :
예! 작동했습니다. 그래서 올바르게 이해한다면,'DataContext = someObject' 문법을 사용할 때, DataContext 속성은 자동적으로 someObject에 대한 Binding 객체를 instanciates합니까? – slaphappy
아니요. 개체를 직접 설정하기 만하면됩니다. 바인딩을 사용하고 속성에 대한 경로를 사용하면 변경 사항이 등록됩니다. 객체에 대한 바인딩이 아닌 객체에 대한 바인딩을 사용하면 꽤 쓸모가 없습니다. 객체는 절대로 변경되지 않으므로 변경 사항을 등록 할 필요가 없으므로 직접 객체에 대한 바인딩이 필요하지 않습니다! – Arcturus