WPFデータバインディング:他の2つのプロパティを参照するプロパティにバインドする

StackOverflow https://stackoverflow.com/questions/3293490

質問

基本的に、TXTFullNameという名前のテキストボックスに(一方向)にバインドする方法。最初は、ToStringが返されてからテキストボックス内のテキストがクリア/空白になります。ただし、FirstNameまたはLastNameに変更を加えると、フルネームに対するバインディングは更新されません。これを行う方法は?

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

ああ、これを扱う一般的な方法がある場合は超素晴らしいでしょう。/ P>

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;
        }
    }
}
.

役に立ちましたか?

解決

TextBoxを複数の値にバインドする方法: MultivalueConverterを作成し、それを使用して最初の名前とlastNameの両方にバインドします。

fullname firstNameまたはlastNameの変更時に通知しないでください。クラスでは、DependencyPropertyのすべての使用法を削除し、代わりにクラスをInotifyPropertyChangedを実装してください。firstNameまたはlastNameが変更されたときにフルネームのPropertyChangedイベントを投稿してください。TextBoxをFullNameに直接バインドします。

メソッドへの「バインディング」のためにObjectDataProviderをチェックしてください。

これらの答えのうち私はあなたが2番目のものをすることを勧めます。

他のヒント

マルチビンディングを使うことができます...

<TextBlock>
     <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}, {1}">
           <Binding Path="LastName" />
           <Binding Path="FirstName" />
        </MultiBinding>
     </TextBlock.Text>
</TextBlock>
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top