首页 > 解决方案 > 如果集合项的属性发生更改,则 WPF 调用转换器

问题描述

使用PropertyChanged.Fody。我有一个 ObservableCollection 填充了自定义类项。它们每个都有一个属性 IsTableSelected。

如果集合中的至少一个项目的属性 IsTableSelected 设置为 true,我希望启用一个按钮。问题是:我的 Converter 将集合作为一个值,如果集合中的项目更改了它们的属性,则不会调用它。

这是我的 XAML:

<Button 
    Grid.Row="1" 
    Content="Connect" 
    Margin="5"  
    IsEnabled="{Binding Tables, Converter={StaticResource selectedItemsToBoolConverter}}"
    />

这是项目类:

public class ListBoxItemModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = (sender, e) => { };

    public bool IsTableSelected
    {
        get;
        set;
    }

    public string Name
    {
        get;
        set;
    }
}

这是转换器:

class SelectedItemsToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        ObservableCollection<ListBoxItemModel> collection = value as ObservableCollection<ListBoxItemModel>;
        if (collection.Count > 0)
        {
            if (collection.Where(item => item.IsTableSelected == true).ToList().Count > 0)
            {
                return true;
            }

            else
            {
                return false;
            }
        }
        else return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

以防万一来自 ViewModel 的一行:

public ObservableCollection<ListBoxItemModel> Tables { get; set; } 
    = new ObservableCollection<ListBoxItemModel>();

任何使用 MVVM 的方式都会有所帮助。

标签: c#wpfmvvmbindingconverters

解决方案


推荐阅读