civ3

编程好玩

导航

Easy Binding(DataContext,TwoWay)

下载示例:https://files.cnblogs.com/civ3/Easy%20Binding.rar
双向绑定在WPF中非常方便。
<Window x:Class="SDKSample.BindingTest"
    xmlns
="http://schemas.microsoft.com/winfx/avalon/2005"
    xmlns:x
="http://schemas.microsoft.com/winfx/xaml/2005"
    Title
="BindingTest for fun ;)" Name="rootd"
    
>
  
<StackPanel Name="sp">
    
<StackPanel.Resources>
      
<XmlDataProvider x:Key="BookData" XPath="/Books" Source="book.xml">
      
</XmlDataProvider>
      
      
<DataTemplate x:Key="BookDataTemplate">
        
<TextBlock FontSize="12" Foreground="Red">
          
<TextBlock.Text>
            
<Binding XPath="Title"/>
          
</TextBlock.Text>
        
</TextBlock>
      
</DataTemplate>
      
    
</StackPanel.Resources>
    
    
<ListBox
  
Width="400" Height="300" Background="Honeydew"
  ItemsSource
="{Binding Source={StaticResource BookData}, XPath=Book}"
  ItemTemplate
="{StaticResource BookDataTemplate}" SelectionChanged="onChanged"
  
/>
    
<TextBox Name="inputer" Text="{Binding XPath=Title, 

Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
/>

  
</StackPanel>
</Window>
注意不声明inputer的Source,而是当改变选取listbox项时:
        void onChanged(object sender, RoutedEventArgs eas)
        
{
            TextBox inputer
=this.FindName("inputer"as TextBox;
            inputer.DataContext 
= (sender as ListBox).SelectedItem;
        }

我理解是这样实现的:
listItem对应(数据)XmlNode,初始化时,listItem用模版显示Node的Title文本。
当改变选取listbox项时
通过DataContext(数据上下文)属性,改变数据游标位置,从而改变inputer的绑定源。
由于inputer的绑定模式是双向的,所以手工输入改变inputer的文本时

(UpdateSourceTrigger=PropertyChanged),同步更新绑定源。
这时你会发现,listbox的显示也同步发生改变。

感觉DataContext是个很神奇的东西。

澄清几个概念:
数据源:XmlDataProvider的Source——book.xml
IO级的理解
绑定源:Binding Source={StaticResource BookData}
运行时的理解

小发现:
FindName——有DOM基础的同志一定会回忆起getElementById或selectSingleNodeById
 (sender as ListBox)——有面向对象基础的同志都明白这叫“装箱”,我喜欢一致地用C#

附:book.xml
要放到exe的相同路径,并include到project中,惑之。

<Books>
        
<Book ISBN="0-7356-0562-9" Stock="in">
          
<Title>XML in Action</Title>
          
<Summary>XML Web Technology</Summary>
        
</Book>
        
<Book ISBN="0-7356-1370-2" Stock="in">
          
<Title>Programming Microsoft Windows With C#</Title>
          
<Summary>C# Programming using the .NET Framework</Summary>
        
</Book>
        
<Book ISBN="0-7356-1288-9" Stock="out">
          
<Title>Inside C#</Title>
          
<Summary>C# Language Programming</Summary>
        
</Book>
        
<Book ISBN="0-7356-1377-X" Stock="in">
          
<Title>Introducing Microsoft .NET</Title>
          
<Summary>Overview of .NET Technology</Summary>
        
</Book>
        
<Book ISBN="0-7356-1448-2" Stock="out">
          
<Title>Microsoft C# Language Specifications</Title>
          
<Summary>The C# language definition</Summary>
        
</Book>
</Books>

posted on 2006-02-12 11:17  civ3's .NET studying  阅读(846)  评论(1编辑  收藏  举报