另一个 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。
我在实现反映对基础数据源所做更改的 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。