티스토리 뷰

http://www.wpf-tutorial.com/data-binding/using-the-datacontext/

http://www.wpf-tutorial.com/data-binding/the-update-source-trigger-property/


DataContext 속성의 디폴트는 null입니다. 그러나, DataContext는 컨트롤 계층에 의하여 상속되므로 하위 컨트롤에서 사용할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
<StackPanel Margin="15">
        <WrapPanel>
            <TextBlock Text="Window title : " ></TextBlock>
            <TextBox Text="{Binding Title, UpdateSourceTrigger=PropertyChanged}" Width="150"></TextBox>
        </WrapPanel>
        <WrapPanel Margin="0,10,0,0">
            <TextBlock Text="Window dimensions: " />
            <TextBox Text="{Binding Width}" Width="50" />
            <TextBlock Text=" x " />
            <TextBox Text="{Binding Height}" Width="50" />
        </WrapPanel>
    </StackPanel>
cs


1
2
3
4
5
public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }
cs

창에는 창에는 컨트롤에 전달되는 DataContext가 있기 때문에, 각각의 binding에 소스를 정의할 필요가 없습니다.



하지만, 이와 같은 경우, TextBox의 변경 내용이 즉시 소스로 보내지지 않고, TextBox에서의 포커싱이 사라지면 업데이트 됩니다.


위와 같은 동작은 UpdateSourceTrigger라는 바인딩 속성에 의해 제어됩니다. 디폴트로는 Text 속성을 제외한 모든 속성은 PropertyChanged(속성 변경 시 즉시 업데이트)됩니다. Tex속성은 LostFocus(포커스를 잃어버려렸을 때 업데이트)됩니다.

또다른 속성으로는 수동 업데이트 인 Explicit이 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
<StackPanel Margin="15">
        <WrapPanel>
            <TextBlock Text="Window title:  " />
            <TextBox Name="txtWindowTitle" Text="{Binding Title, UpdateSourceTrigger=Explicit}" Width="150" />
            <Button Name="btnUpdateSource" Click="btnUpdateSource_Click" Margin="5,0" Padding="5,0">*</Button>
        </WrapPanel>
        <WrapPanel Margin="0,10,0,0">
            <TextBlock Text="Window dimensions: " />
            <TextBox Text="{Binding Width, UpdateSourceTrigger=LostFocus}" Width="50" />
            <TextBlock Text=" x " />
            <TextBox Text="{Binding Height, UpdateSourceTrigger=PropertyChanged}" Width="50" />
        </WrapPanel>
    </StackPanel>
cs


1
2
3
4
5
6
7
8
9
10
11
public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
        }
 
        private void btnUpdateSource_Click(object sender, RoutedEventArgs e)
        {
            BindingExpression binding = txtWindowTitle.GetBindingExpression(TextBox.TextProperty);
            binding.UpdateSource();
        }
cs


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함