そのようなものは存在しますか(UpdateSourceTriggerが存在するように)、またはそれはどういうわけか可能ですか?必要なときにだけターゲットを更新したいのですが。一度だけ更新したくないので、1回限りのバインドは機能しません。バインドされたオブジェクトが変更されたときではなく、必要なときに更新したいと思います。
だから私の質問は非常に単純です:ソースが変更されたときにターゲットを変更しないで、何かが呼び出されたときにターゲットを変更するにはどうすればよいですか?
ありがとう
必要なときにコード ビハインドでデータを再バインドできます。または BindingExpression.UpdateTarget () を試してください
UIを更新したくない条件を事前に知っている場合はPropertyChangedEvent
、その場合は上げないでください。(クラスに実装INPC
している場合)。ViewModel
DPによって内部的に処理されるDependency Property
ため、これは機能しないことを私は知っています。PropertyChangedEvent
しかし、通常の場合CLR properties
は機能します。例-
<TextBlock Text="{Binding Name}"/>
ViewModel-
public string Name
{
get { return name; }
set
{
name = value;
if(UpdateUI) // Your condition here
{
OnPropertyChanged("Name");
}
}
}
もう 1 つできることは、バインディングに直接関係のないイベントにフックする、添付された動作を使用することです。以下は、いくつかのアイデアを提供するための作業コードのスケルトンです。
internal class ContactcControlPropertySetter : Behavior<ContentControl>
{
protected override void OnAttached() {
base.OnAttached();
if (AssociatedObject == null)
throw new InvalidOperationException("AssociatedObject must not be null");
AssociatedObject.DataContextChanged += OnDataContextChanged;
CultureManager.UICultureChanged += OnCultureChanged;
}
protected override void OnDetaching() {
AssociatedObject.DataContextChanged -= OnDataContextChanged;
CultureManager.UICultureChanged -= OnCultureChanged;
}
private void OnCultureChanged(object sender, EventArgs e) {
SetProperties();
}
private void SetProperties()
{
...
var tooltipFmt = _resourceManager.GetString(key, culture);
...
AssociatedObject.ToolTip = tooltip;
...
}