C# 我的c组合框在选择项目后不会调用getter。为什么?

C# 我的c组合框在选择项目后不会调用getter。为什么?,c#,wpf,binding,combobox,C#,Wpf,Binding,Combobox,我有一个带有SelectedItem的组合框。如果我选择一个项目,我的setter会进行一些计算,也许我想将该值重置为旧值。不幸的是,我的视图没有刷新 我有以下组合框: <ComboBox BorderThickness="0" VerticalAlignment="Center" Margin="2,0" DisplayMemberPath="Name" ItemsSource="{Binding ItemsVS.View}" SelectedItem="{Binding

我有一个带有SelectedItem的组合框。如果我选择一个项目,我的setter会进行一些计算,也许我想将该值重置为旧值。不幸的是,我的视图没有刷新

我有以下组合框:

<ComboBox BorderThickness="0" VerticalAlignment="Center" Margin="2,0"
  DisplayMemberPath="Name" 
  ItemsSource="{Binding ItemsVS.View}" 
  SelectedItem="{Binding SelectedItem, Mode=TwoWay}" >

</ComboBox>
如果要使组合框在设置新值后读回当前值,则需要向绑定中添加一个不执行任何操作的转换器。这是一个有用的小技巧,因为绑定通常不会检查实际应用的源值是否与绑定提供的新值匹配。添加转换器会强制它进行检查

public sealed class NoOpConverter : IValueConverter
{
    public static readonly NoOpConverter Instance = new NoOpConverter();

    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        return value;
    }
}

如果在调用PropertyChanged之前将属性设置回其原始值,则需要刷新什么?没有任何更改。请用WPF或ASP或其他方式标记您的问题@本罗宾逊真正的话题有点复杂。也许我既不想设置值也不想设置旧值。@koalabruder也许你最好给这个问题添加更多的细节,目前我的理解是,当我的属性的值没有改变时,为什么视图没有用新值更新,这没有多大意义。如果我像这个答案那样修改settri,但是从Peant gallery,想澄清一下:您的意思是绑定假设属性getter总是返回传递给setter的内容,特别是忽略setter正在引发的PropertyChanged事件也是如此?如果源属性在更新源值时发生PropertyChanged事件,它将忽略这些事件,因为它希望在设置值时引发事件,毕竟它正在更改值。但是,是的,这种行为很幼稚,因为它假定您不会用新值替换绑定提供的值。在WPF4.5中,我相信他们改变了行为,使得它总是在更新源代码值后读取,但是出于兼容性的考虑,您无论如何都应该使用这种解决方法。
public sealed class NoOpConverter : IValueConverter
{
    public static readonly NoOpConverter Instance = new NoOpConverter();

    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        return value;
    }
}