代码之家  ›  专栏  ›  技术社区  ›  TerrorAustralis

组合框SelectedItem在源更改时不更新

  •  8
  • TerrorAustralis  · 技术社区  · 14 年前

    我有一个viewmodel INotifyPropertyChanged . 在此viewModel上有一个名为 SubGroupingView . 此属性绑定到组合框的选定项。当我更改组合框时,源属性会被很好地更新,但是当我更改源属性或初始化控件时 combobox.selectedItem 不反映属性中存在的内容。

    <ComboBox Grid.Column="3" Grid.Row="1" 
              Margin="0,1,4,1" 
              SelectedItem="{Binding Path=SubGroupingView, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay, diag:PresentationTraceSources.TraceLevel=High}" 
              ItemsSource="{Binding Columns}" 
              DisplayMemberPath="DisplayName">
    

    物业提出 PropertyChanged 事件和TraceSource输出显示绑定检测到它并传输了值,只是combobox没有反映它。任何想法都欢迎!

    编辑:
    跟踪源的输出如下:

    System.Windows.Data Warning: 91 : BindingExpression (hash=23631369): Got PropertyChanged event from ReportViewModel (hash=52844413)  
    System.Windows.Data Warning: 97 : BindingExpression (hash=23631369): GetValue at level 0 from ReportViewModel (hash=52844413) using RuntimePropertyInfo(SubGroupingView):         DataColumnViewModel (hash=58231222)  
    System.Windows.Data Warning: 76 : BindingExpression (hash=23631369): TransferValue - got raw value DataColumnViewModel (hash=58231222)  
    System.Windows.Data Warning: 80 : BindingExpression (hash=23631369): TransferValue - implicit converter produced DataColumnViewModel (hash=58231222)  
    System.Windows.Data Warning: 85 : BindingExpression (hash=23631369): TransferValue - using final value DataColumnViewModel (hash=58231222)  
    

    public class ReportViewModel : ViewModelBase, IReportTemplate
    {
        public DataColumnViewModel SubGroupingView
        {
            get
            {
                return GetViewModel(_report.SubGrouping);
            }
            set
            {
                if (_report.SubGrouping == value.ColumnName)
                    return;
                _report.SubGrouping = value.ColumnName;
                RefreshDataSeries();
                base.OnPropertyChanged("SubGroupingView");
                base.OnPropertyChanged("IsReady");
            }
    
        }
    }
    

    注: ViewModelBase INotifyPropertyChange .

    回答
    GetHashCode() Equals(object) 现在它运行得很好。谢谢你的帮助!

    3 回复  |  直到 10 年前
        1
  •  18
  •   Community CDub    7 年前

    从SubzingView返回的对象必须与组合框。项目(这意味着它必须在列集合中)。因此,如果执行“a.Equals(b)”,则需要返回true。

    如果它们在功能上是相同的,但是在比较时没有返回true,那么这就是你的问题。您需要返回相同的对象,或者重写Equals方法(可能还有==和!=运算符)。

    question .

        2
  •  3
  •   Zach Johnson    14 年前

    IsSynchronizedWithCurrentItem 在你的 ComboBox false ? 您可以尝试显式设置 IsSynchronizedWithCurrentItem="True" 看看能不能帮上忙。

        3
  •  0
  •   Alex34758    8 年前

    this example (参见“备注”部分的末尾-“实施者注意事项”和“示例”部分)。