mrfangzheng

Hope and fear are useless. Be confident, and always be prepared for the worst.
  首页  :: 新随笔  :: 联系 :: 管理

WPF Databinding examples

Posted on 2008-07-05 14:09  mrfangzheng  阅读(357)  评论(0编辑  收藏  举报
  1. 最简单的形式
    <TextBlock Text="{Binding ElementName=lbColor, Path=SelectedItem.Content}" />

    <TextBlock x:Name="tbSelectedColor"
        Text="{Binding ElementName=lbColor, Path=SelectedItem.Content, Mode=OneWay}"
        Background="{Binding ElementName=lbColor, Path=SelectedItem.Content, Mode=OneWay}"/>

    <TextBox x:Name="txtSelectedColor" 
        Text="{Binding ElementName=lbColor, Path=SelectedItem.Content, Mode=TwoWay}"
        Background="{Binding ElementName=lbColor, Path=SelectedItem.Content, Mode=OneWay}"/>
  2. Bingding to XML
    <ListBox x:Name="lbColor"
    IsSynchronizedWithCurrentItem="True"
    ItemsSource="{Binding Source={StaticResource MoreColors}, XPath=color/@name}"/>

    <CollectionViewSource x:Key="personView"
        Source="{Binding Source={StaticResource persons}}">
        <CollectionViewSource.SortDescriptions>
            <ComponentModel:SortDescription PropertyName="City" Direction="Ascending" />
            <ComponentModel:SortDescription PropertyName="FullName" Direction="Descending" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>

    <StackPanel
        DataContext="{Binding Source={StaticResource personView}}" >
        <TextBlock Text="{Binding Path=FullName}"/>
        <TextBlock Text="{Binding Path=Title}"/>
        <TextBlock Text="{Binding Path=City}"/>
    </StackPanel>

  3. Binding C# code
    ---------------------------------------------------------------------------------------------
    public class Person : INotifyPropertyChanged
    {
        string _firstName;
        string _lastName;
  4.     public string FirstName
        {
            get { return _firstName; }
            set
            {
                _firstName = value;
                this.OnPropertyChanged("FirstName");
                this.OnPropertyChanged("FullName");
            }
        }

        public string LastName
        {
            get { return _lastName; }
            set
            {
                _lastName = value;
                this.OnPropertyChanged("LastName");
                this.OnPropertyChanged("FullName");
            }
        }

        public string FullName
        {
            get
            {
                return String.Format("{0}, {1}",
                    this.LastName, this.FirstName);
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        void OnPropertyChanged(string propName)
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(
                    this, new PropertyChangedEventArgs(propName));
        }    
    }
    ---------------------------------------------------------------------------------------------
    var person = new Person { FirstName = "Josh", LastName = "Smith" };
    Binding b = new Binding();
    b.Source = person;
    b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
    b.Path = new PropertyPath("FirstName");
    this.firstNameTextBox.SetBinding(TextBox.TextProperty, b);