Binding(五)——使用XML数据作为Binding的源

先看一个线性集合的例子。下面的XML文本是一组学生的信息存放于D:\RawData.xml,我们要把他显示在一个ListView控件里。

<?xml version="1.0" encoding="utf-8"?>
<StudentList>
	<Student Id="1">
		<Name>Tim</Name>
	</Student>
	<Student Id="2">
		<Name>Tom</Name>
	</Student>
	<Student Id="3">
		<Name>Vina</Name>
	</Student>
	<Student Id="4">
		<Name>Emily</Name>
	</Student>
</StudentList>

程序的XAML部分如下:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="XML Source" Height="205" Width="240">
    <StackPanel Background="LightBlue">
        <ListView x:Name="listViewStudents" Height="130" Margin="5">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Id" Width="80"
                                    DisplayMemberBinding="{Binding XPath=@Id}"/>
                    <GridViewColumn Header="Name" Width="120"
                                    DisplayMemberBinding="{Binding XPath=Name}"/>
                </GridView>
            </ListView.View>
        </ListView>
        <Button Content="Load" Click="Button_Click" Height="25" Margin="5,0"/>
    </StackPanel>
</Window>

加粗的两句语句,它们分别为GridView的两列指明了关注的XML的路径。使用@符号加字符串表示的是XML元素的Attribute,不加@符号的字符串表示的是子集元素。

Button的Click事件处理代码如下:

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            XmlDataProvider xdp = new XmlDataProvider();
            xdp.Source = new Uri(@"D:\RawData.xml");
            xdp.XPath = @"/StudentList/Student";

            this.listViewStudents.DataContext = xdp;
            this.listViewStudents.SetBinding(ListView.ItemsSourceProperty, new Binding());
        }

XmlDataProvider有一个名为Source的属性,可以用它直接指定XML文档所在的位置(无论XML文档存储在本地硬盘还是网络上)。使用XPath选择需要暴露的数据,现在需要一组Student。

运行效果如下:


To be continued...

在WPF(Windows Presentation Foundation)中,PasswordBox 控件用于创建一个密码输入框,用户可以在其中输入密码,并且输入的内容会以星号或其他指定字符显示,以隐藏实际的密码。Binding 功能可以将 PasswordBox 的 Password 属性绑定到一个视图模型(ViewModel)中的属性,这样就可以实现数据的双向同步。 为了绑定 Password 属性,你需要使用一个特殊的绑定行为,因为 Password 属性是只读的,不能直接绑定。WPF 提供了Password属性的附加行为——Password属性的绑定会被自动转发到Password属性的PasswordChar行为上。这里是一个简单的例子,展示如何将PasswordBox的Password属性绑定到ViewModel中的Password属性: ```xml <PasswordBox Name="passwordBoxControl" Width="200" Height="30" Margin="10" PasswordChar="*" Password="{Binding Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/> ``` 在上面的XAML代码中,Password属性通过PasswordBox的Password属性绑定到ViewModel的Password属性。这里还指定了Mode为TwoWay和UpdateSourceTrigger为PropertyChanged,意味着当PasswordBox中的密码改变时,它会立即同步到ViewModel的Password属性;当ViewModel的Password属性改变时,PasswordBox也会更新。 ViewModel的Password属性可能看起来像这样: ```csharp public class ViewModel : INotifyPropertyChanged { private string _password; public string Password { get { return _password; } set { if (_password != value) { _password = value; OnPropertyChanged(nameof(Password)); } } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` 注意,这里我们还需要处理ViewModel的PropertyChanged事件,以确保当Password属性值改变时,界面可以相应地更新。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值