Easy Binding(DataContext,TwoWay)
下载示例:https://files.cnblogs.com/civ3/Easy%20Binding.rar
双向绑定在WPF中非常方便。
双向绑定在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项时: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>
void onChanged(object sender, RoutedEventArgs eas)
{
TextBox inputer=this.FindName("inputer") as TextBox;
inputer.DataContext = (sender as ListBox).SelectedItem;
}
{
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>
<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) 编辑 收藏 举报