问题描述:通过转换器绑定到ObservableCollection的文本字符串在集合更改时不更新。
解答:
在WPF或者其他XAML框架中,当我们将一个文本字符串绑定到ObservableCollection时,如果集合发生更改,文本字符串并不会自动更新。这是因为文本字符串是一个值类型,而不是一个引用类型。
解决这个问题的方法是使用INotifyPropertyChanged接口和绑定转换器。
public class MyViewModel : INotifyPropertyChanged
{
private ObservableCollection<string> _myCollection;
public ObservableCollection<string> MyCollection
{
get { return _myCollection; }
set
{
_myCollection = value;
OnPropertyChanged(nameof(MyCollection));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
public class CollectionToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is ObservableCollection<string> collection)
{
return string.Join(", ", collection);
}
return string.Empty;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window.Resources>
<local:CollectionToStringConverter x:Key="CollectionToStringConverter" />
</Window.Resources>
<Grid>
<TextBlock Text="{Binding MyCollection, Converter={StaticResource CollectionToStringConverter}}" />
</Grid>
在上面的示例中,我们将MyCollection绑定到TextBlock的Text属性,并使用CollectionToStringConverter进行转换。
这样,当MyCollection发生更改时,TextBlock的文本字符串将自动更新。
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云