另一个 ComboBox 绑定未按预期工作

Another ComboBox binding not working as expected

我在实现反映对基础数据源所做更改的 ComboBox 时遇到问题。到目前为止,从我阅读的帖子数量来看,这不是一个不常见的问题,但我仍然无法让它发挥作用。当新记录添加到 CaseFiles 集合时,它不会出现在下拉列表中,直到应用程序重新启动。我做错了什么?

所有 (EF) 生成的实体都继承自实现 INotifyPropertyChanged 的​​ BaseModel,ViewModel 也通过 ViewModelBase 实现 INotifyPropertyChanged。

组合框 xaml 如下所示:

      <ComboBox x:Name="cbxSelect" Height="26" MinWidth="230"                      
                  ToolTip="DRE Number / Rolling Log Number / Operational File Number"
                  ItemsSource="{Binding CaseFiles}"
                  SelectedValue="{Binding SelectedCaseFile}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock VerticalAlignment="Center" Foreground="DarkBlue" FontSize="14">
                        <TextBlock.Text>
                            <MultiBinding Converter="{StaticResource NullToStringMultiConverter}">
                                <Binding Path="Evaluator.DreNumber"/>
                                <Binding Path="RollingLogNumber"/>
                                <Binding Path="FileNumber"/>
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

视图模型:

    public class MainViewModel : ViewModelBase
    { 
        private MyEntites db;
        private ObservableCollection<CaseFile> caseFiles;
        public ObservableCollection<CaseFile> CaseFiles
        {
            get { return caseFiles; }
        }

        public MainViewModel()
        {
            db = new MyEntities();                
            caseFiles = Convert<CaseFile>(db.CaseFile.GetAll().ToList())
        }

        public static ObservableCollection<T> Convert<T>(IEnumerable original)
        {
            return new ObservableCollection<T>(original.Cast<T>());
        }
    }

When a new record is added to the CaseFiles collection it doesn't appear in the drop down list until the application is restarted. What am I doing wrong?

您可能没有将项目添加到视图模型的 CaseFiles 属性 返回的同一个 ObservableCollection 实例。只有当您向这个 ObservableCollection 实例添加项目时,新项目才会出现在 ComboBox 中。

例如,如果您将一个项目添加到 db.CaseFile 集合,这不会影响 ComboBox,因为它绑定到一个完全不同的集合。

您在构造视图模型时创建了一个全新的 ObservableCollection,此后这个新集合与您最初传递给静态 Convert 方法的列表之间没有任何联系。

因此请确保您只创建 MainViewModel 的单个实例 class 并且您实际上是在将项目添加到其 CaseFiles 属性 和 DbContext。

显然,如果您需要任何进一步的帮助,您需要提供问题的可重现示例,包括准确显示您实际如何将项目添加到 ObservableCollection 的任何代码片段。但是如果 ComboBox 的 DataContext 设置或绑定到 MainViewModel 的实例,则将 CaseFile 对象添加到其 CaseFiles 属性 应该更新 ComboBox。