WPFデータバインディング:他の2つのプロパティを参照するプロパティにバインドする
-
18-09-2020 - |
質問
基本的に、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>
. 所属していません StackOverflow