在 WPF 中仅 XAML 多绑定/触发器

本文关键字:绑定 触发器 XAML WPF 中仅 | 更新日期: 2023-09-27 18:33:06

我对连接到我的 XAML 视图的视图模型具有只读访问权限。

在伪代码中,它看起来像这样:

public class HelloWorld:INotifyPropertyChanged{
  private int _counter;
  public int Counter {get{return ++_counter;}}
  public bool Foo {get{...}set{...InvokeINotifyPropertyChanged("Foo");}}
}

我有一个TextBlock,它的Text属性绑定到Counter,但希望在更改/设置Foo时重新评估它的值,仅在标记中。

我可以解决这个问题,通过将TextBlockText属性绑定到MultiBinding并将CounterFoo都作为绑定,然后创建一个实现IMultiValueConverter的转换器,但这似乎有点矫枉过正。

有没有更好的方法?

在 WPF 中仅 XAML 多绑定/触发器

当你说只读时,你的意思是你甚至无法访问ViewModel源代码?在这种情况下,我会推荐这样的东西:

public TestClass()
{
    _viewModel.PropertyChanged += OnPropertyChanged;
}
private void OnPropertyChanged(object sender, PropertyChangedEventArgs args)
{
    if (args.PropertyName == "Foo")
    {
        _textBlock.GetBindingExpression(TextBlock.TextProperty).UpdateTarget();
    }
}

但是如果你可以访问视图模型代码,你可以简单地在Foo setter上调用InvokeINotifyPropertyChanged("Counter")。