0

基本的に、txtFullName という名前のテキスト ボックスに (一方向で) バインドするにはどうすればよいですか。最初は、ToString が "" を返すため、テキスト ボックス内のテキストはすべてクリア/空白になります。ただし、FirstName または LastName を変更しても、FullName に対するバインディングは更新されません。これを行う方法はありますか?

また、(フィールドだけでなく) メソッドにバインドする方法はありますか? つまり、バインドを直接 ToString() メソッドに設定し、FirstName または LastName が変更されたときに更新するようにしますか?

ああ、これを処理する何らかの一般的な方法があれば、それは非常に素晴らしいことです... FullName フィールドの属性や ToString メソッドの属性のように、変更を探すプロパティを指定します。

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace AdvancedDataBinding
{
    public class UserEntity
    {
        static UserEntity()
        {
            FirstNameProperty = DependencyProperty.Register("FirstName", typeof(String), typeof(UserEntity));
            LastNameProperty = DependencyProperty.Register("LastName", typeof(String), typeof(UserEntity));
        }

        public String FirstName
        {
            get { return (String)GetValue(FirstNameProperty); }
            set { SetValue(FirstNameProperty, value); }
        }
        public static readonly DependencyProperty FirstNameProperty;

        public String LastName
        {
            get { return (String)GetValue(LastNameProperty); }
            set { SetValue(LastNameProperty, value); }
        }
        public static readonly DependencyProperty LastNameProperty;

        public String FullName
        {
            get { return ToString(); }
        }

        public override string ToString()
        {
            return FirstName + " " + LastName;
        }
    }
}
4

2 に答える 2

2

テキスト ボックスを複数の値にバインドする方法: MultiValueConverter を作成し、それを使用して FirstName と LastName の両方にバインドします。

FullName は、FirstName または LastName が変更されたときに通知しません。クラスで、DependencyProperty の使用をすべて削除し、代わりにクラスに INotifyPropertyChanged を実装させます。FirstName または LastName が変更されたときに、FullName の PropertyChanged イベントを投稿します。テキストボックスを FullName に直接バインドします。

メソッドへの「バインディング」については、ObjectDataProvider を確認してください。

これらの回答のうち、2番目の回答を行うことをお勧めします。

于 2010-07-20T22:30:44.630 に答える
1

次のように MultiBinding を使用できます...

<TextBlock>
     <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}, {1}">
           <Binding Path="LastName" />
           <Binding Path="FirstName" />
        </MultiBinding>
     </TextBlock.Text>
</TextBlock>
于 2010-07-20T22:46:33.350 に答える