데이터 컨텍스트 기본값 :MainWindow.xaml에 아래의 XAML을 갖는
<Window x:Class="TestDependency.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Name="someLabel" Grid.Row="0" Content="{Binding Path=LabelText}"></Label>
<Button Grid.Row="2" Click="Button_Click">Change</Button>
</Grid>
</Window>
그리고 MainWindow.xaml.cs를 뒤에 다음 코드를
public static readonly DependencyProperty LabelTextProperty = DependencyProperty.Register("LabelText", typeof(String), typeof(MainWindow));
public int counter = 0;
public String LabelText
{
get
{
return (String)GetValue(LabelTextProperty);
}
set
{
SetValue(LabelTextProperty, value);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
LabelText = "Counter " + counter++;
}
내가 생각했을 그 기본 DataContext
뒤에있는 코드입니다. 하지만 나는 DataContext
을 지정해야합니다. 어느 쪽이 기본값 인 DataContext
입니까?Null
? 나는 뒤에있는 코드가 (같은 클래스 인 것처럼)있을 것이라고 생각했을 것이다.
그리고이 샘플로 내가 레이블의 내용을 수정할 뒤에 코드를 사용하고
, 내가 직접 사용할 수 있습니다 이 는someLabel.Content = "Counter " + counter++;
가 내가 기대
코드 뒤에있는 것은, 그것은이 안된다고 DataContext
이 다른 클래스에있는 경우 가지고있는 UI 업데이트 문제
그러나 바인딩/datacontext는 지정되지 않은 경우 부모로부터 상속됩니다. 그렇지 않으면 창 클래스에서 datacontext를 설정해도 여전히 결과가 생성되지 않습니다. –
@MiyamotoAkira : 물론, 상속되었습니다 ('DataContext'에 대한 문서에서도 마찬가지입니다). 그런데 왜 당신의'MainWindow'가 디폴트로'DataContext'가 될 것으로 기대합니까? 바인딩 엔진은 마음을 읽을 수 없습니다. – Jon
이 프로그램의 계층 구조의 최상위로'MainWindow'를보고 있기 때문에 나는 가정합니다. 그러나 wpf가 두포 (아직 :-)에서 무엇을하고 있는지 알지 못하며 그 위에 다른 것들이있을 것입니다. –