IsSynchronizedWithCurrentItem

 <UserControl.Resources>
        <utils:StringArrayConverter x:Key="stringArrayConverter" />
        <utils:BookTemplateSelector x:Key="bookTemplateSelector" />
        <ObjectDataProvider x:Key="books" ObjectType="local:BookFactory" MethodName="GetBooks" />
        
        <DataTemplate x:Key="wroxTemplate" DataType="{x:Type local:Book}">
            <Border Background="Red" Margin="10" Padding="10">
                <StackPanel>
                    <Label Content="{Binding Title}" />
                    <Label Content="{Binding Publisher}" />
                </StackPanel>
            </Border>
        </DataTemplate>

        <DataTemplate x:Key="dummiesTemplate" DataType="{x:Type local:Book}">
            <Border Background="Yellow" Margin="10" Padding="10">
                <StackPanel>
                    <Label Content="{Binding Title}" />
                    <Label Content="{Binding Publisher}" />
                </StackPanel>
            </Border>
        </DataTemplate>

        <DataTemplate x:Key="bookTemplate" DataType="{x:Type local:Book}">
            <Border Background="LightBlue" Margin="10" Padding="10">
                <StackPanel>
                    <Label Content="{Binding Title}" />
                    <Label Content="{Binding Publisher}" />
                </StackPanel>
            </Border>
        </DataTemplate>
    </UserControl.Resources>
    <DockPanel DataContext="{StaticResource books}">
        <StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom" HorizontalAlignment="Center">
            <Button Margin="5" Padding="4" Content="Add Book" Click="OnAddBook" />
        </StackPanel>
        <ListBox DockPanel.Dock="Left" ItemsSource="{Binding}" Margin="5" MinWidth="120" IsSynchronizedWithCurrentItem="True" ItemTemplateSelector="{StaticResource bookTemplateSelector}">
        </ListBox>
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Label Content="Title" Grid.Row="0" Grid.Column="0" Margin="10,0,5,0" HorizontalAlignment="Left" VerticalAlignment="Center" />
            <Label Content="Publisher" Grid.Row="1" Grid.Column="0" Margin="10,0,5,0" HorizontalAlignment="Left" VerticalAlignment="Center" />
            <Label Content="Isbn" Grid.Row="2" Grid.Column="0" Margin="10,0,5,0" HorizontalAlignment="Left" VerticalAlignment="Center" />
            <Label Content="Authors" Grid.Row="3" Grid.Column="0" Margin="10,0,5,0" HorizontalAlignment="Left" VerticalAlignment="Center" />
            <TextBox Text="{Binding Title}"  Grid.Row="0" Grid.Column="1" Margin="5" />
            <TextBox Text="{Binding Publisher}" Grid.Row="1" Grid.Column="1" Margin="5" />
            <TextBox Text="{Binding Isbn}" Grid.Row="2" Grid.Column="1" Margin="5" />
            <TextBlock Text="{Binding Authors, Converter={StaticResource stringArrayConverter}, ConverterParameter=', '}"  Grid.Row="3" Grid.Column="1" Margin="5" VerticalAlignment="Center" TextWrapping="Wrap" />
        </Grid>
    </DockPanel>

BookFactory类

public class BookFactory
    {
        private ObservableCollection<Book> books = new ObservableCollection<Book>();

        public BookFactory()
        	{
            books.Add(new Book("Professional C# 4 with .NET 4", "Wrox Press", "978-0-470-50225-9", "Christian Nagel", "Bill Evjen", "Jay Glynn", "Karli Watson", "Morgan Skinner"));
            books.Add(new Book("Professional C# 2008", "Wrox Press", "978–0-470-19137-8", "Christian Nagel", "Bill Evjen", "Jay Glynn", "Karli Watson", "Morgan Skinner"));
            books.Add(new Book("Beginning Visual C# 2010", "Wrox Press", "978-0-470-50226-6", "Karli Watson", "Christian Nagel", "Jacob Hammer Pedersen", "Jon D. Reid", "Morgan Skinner", "Eric White"));
            books.Add(new Book("Windows 7 Secrets", "Wiley", "978-0-470-50841-1", "Paul Thurrott", "Rafael Rivera"));
            books.Add(new Book("C# 2008 for Dummies", "For Dummies", "978-0-470-19109-5", "Stephen Randy Davis", "Chuck Sphar"));
        	}

        public Book GetTheBook()
        {
            return books[0];
        }

        public void AddBook(Book book)
        {
            books.Add(book);
        }


        public IEnumerable<Book> GetBooks()
        {
            return books;
        }

    }

Book类

  public class Book : INotifyPropertyChanged
    {
        public Book(string title, string publisher, string isbn, params string[] authors)
        {
            this.title = title;
            this.publisher = publisher;
            this.isbn = isbn;
            this.authors.AddRange(authors);
        }
        public Book()
            : this("unknown", "unknown", "unknown")
        {
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private string title;
        public string Title {
            get
            {
                return title;
            }
            set
            {
                title = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Title"));
            }
        }
        private string publisher;
        public string Publisher 
        {
            get
            {
                return publisher;
            }
            set
            {
                publisher = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Publisher"));
            }
        }
        private string isbn;
        public string Isbn {
            get
            {
                return isbn;
            }
            set
            {
                isbn = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs("Isbn"));
            }
        }

        private readonly List<string> authors = new List<string>();
        public string[] Authors
        {
            get
            {
                return authors.ToArray();
            }
        }

        public override string ToString()
        {
            return this.title;
        }
    }

在XAML中以下Text Binding的内容是DockPanel中的DataContext,因为DataContext是Book的一个集合,所以默认是Binding到第一个Book上,当ListBox设置了 IsSynchronizedWithCurrentItem时,会改变DataContext的CurrentItem(即数据源当前选择的Item),所以当ListBox改变选择项的时候,TextBox和TextBlock的Text内容也会产生相应的变化。
  <DockPanel DataContext="{StaticResource books}">

 <TextBox Text="{Binding Title}"  Grid.Row="0" Grid.Column="1" Margin="5" />
            <TextBox Text="{Binding Publisher}" Grid.Row="1" Grid.Column="1" Margin="5" />
            <TextBox Text="{Binding Isbn}" Grid.Row="2" Grid.Column="1" Margin="5" />
            <TextBlock Text="{Binding Authors, Converter={StaticResource stringArrayConverter}, ConverterParameter=', '}"  Grid.Row="3" Grid.Column="1" Margin="5" VerticalAlignment="Center" TextWrapping="Wrap" />


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值