【发布时间】:2018-11-08 21:24:30
【问题描述】:
我的 ViewModel 中有这个 ObservableCollection:
private ObservableCollection<Component> _standardComponents;
public ObservableCollection<Component> StandardComponents
{
get { return _standardComponents; }
set { SetProperty(ref _standardComponents, value); }
}
它的属性之一
public bool ExistInDatabase { get; set; }
根据用户操作而变化。
我使用 IValueConverter 在我的 ListView 中显示此属性,如下所示:
[ValueConversion(typeof(bool), typeof(BitmapImage))]
public class BoolToBitmapImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var bitmapImage = ((bool)value == true) ? "Images/Green Ball.png" : "Images/Red Ball.png";
return new BitmapImage(new Uri($"/Proxos.Core;Component/{bitmapImage}", UriKind.Relative));
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return null;
}
}
在我看来,我将此模板用作动态资源:
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding ExistInDatabase, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource BoolToBitmapImageConverter}}" Height="17" Width="17"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
在我的 ListView 中显示转换后的 ExistInDatabase 属性:
<ListView Grid.ColumnSpan="7" Grid.RowSpan="10" x:Name="_componentListView" Margin="10" ItemsSource="{Binding StandardComponents, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" View="{DynamicResource componentsList}" SelectedIndex="{Binding ComponentSelectedIndex}" >
当我第一次加载 UserControll 时它工作正常,但是当我更新属性 ExistInDatabase 时,不会触发 IValueConverter。
这是我的列表视图: ListView
【问题讨论】:
-
您是否为您的 ViewModel 实现
INotifyPropertyChanged并在ExistInDatabase更改时调用事件? -
我正在使用 Prism,所以我的 ViewModel 派生自 ViewModelBase,而我的 ViewModelBase 派生自 BindableBase,后者实现了 INotifyPropertyChanged
-
我想当你改变它时你仍然需要打电话给
OnPropertyChanged(nameof(ExistInDatabase))。该框架不会为您神奇地做到这一点。
标签: c# binding prism ivalueconverter