惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

G
Google Developers Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
Recent Announcements
Recent Announcements
Y
Y Combinator Blog
博客园 - 聂微东
M
MIT News - Artificial intelligence
博客园_首页
Jina AI
Jina AI
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Vercel News
Vercel News
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
B
Blog
Google DeepMind News
Google DeepMind News
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - civ3's .NET studying

Comet in IE comet研究 动态加载Web Service - civ3's .NET studying IIS.pk(vs2005)==Mutex - civ3's .NET studying [Reading]THIRD BASE 良性克服Firefox跨站 Notify Server 战国[节选] Merssenger线程通讯图 Ajax.NET关键 Ajax多线程 Merssenger构想与原型开发[0] CTeX学习散列 多媒体杂志 [Discovery]msn space trackbackable! HTC到StoryBoard——DHTML迁移到WPF(二) MyText RAR控制台日常备份策略 WPF自学方法
Easy Binding(DataContext,TwoWay)
civ3's .NET studying · 2006-02-12 · via 博客园 - civ3's .NET studying

下载示例: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>