我有一個綁定:如何從視圖模型中更新綁定到DataContext?
<TextBlock Text="{Binding Converter={local:Converter}}" />
與轉換器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var vm = (ViewModel)value;
return vm.SomeProperty;
}
更改SomeProperty
不更新屏幕上的價值。轉換器不被調用。
如何從視圖模型中更新此類綁定?
注意:在實際項目中,轉換器將用於執行一些計算和返回結果。事實上,它甚至會是MultiBinding
與不同視圖模型的類似綁定。我遇到了問題,並能夠將案例縮小到一個簡單的Binding
,其中綁定不用於綁定到屬性,但是像這樣。
MCVE XAML:
<StackPanel>
<TextBlock Text="{Binding Converter={local:Converter}}" />
<Button Content="..." Click="Button_Click" />
</StackPanel>
和代碼:
public partial class MainWindow : Window
{
ViewModel _vm = new ViewModel();
public MainWindow()
{
InitializeComponent();
DataContext = _vm;
}
void Button_Click(object sender, RoutedEventArgs e) => _vm.SomeProperty += "b";
}
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string property) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
string _someProperty = "a";
public string SomeProperty
{
get { return _someProperty; }
set
{
_someProperty = value;
OnPropertyChanged(nameof(SomeProperty));
}
}
}
public class Converter : MarkupExtension, IValueConverter
{
public override object ProvideValue(IServiceProvider serviceProvider) => this;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var vm = (ViewModel)value;
return vm.SomeProperty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
使用MultiBinding。 – Clemens
@Clemens,其實我的問題始於'MultiBinding',它沒有奏效,然後我將問題縮小到正常綁定。 – Sinatr
正如你從答案中可以看到的,目前還不清楚爲什麼你會這樣做,當你可以直接綁定到該屬性。你應該添加一些解釋你的方法背後的推理。 – Clemens