2012-01-27 89 views
0

我有对话框,包含一个组合框组合框触发

<ComboBox Margin="0,1,34,36" Grid.Row="1" Grid.Column="1" ItemsSource ="{Binding Path=CompanyView}" DisplayMemberPath="CompanyName" IsSynchronizedWithCurrentItem="True" 
       SelectedItem="{Binding Path=SelectedCompany}" 

的的ItemSource绑定到collectionviewsource和所选择的项目被绑定到我的viewmodel中的属性是不共享

private Company selectedCompany; 
     public Company SelectedCompany 
     { 

      get{ return this.selectedCompany;} 
      set 
      { 
       this.selectedCompany = value; 
       FilterString = this.selectedCompany.Id; 
      } 
     } 

我可以根据需要多次打开和关闭对话框,而不会出现任何问题。我的问题是, 如果我选择公司组合中的一个项目,然后关闭对话框,当我再次打开对话框窗体试图设置SelectedCompany,在这种情况下,我为空。我可以检查null,但我宁愿明白为什么会发生这种情况。

回答

0

最可能的原因是CollectionViewSource跟踪它自己的SelectedItem,并且此项目可能是null。所以当它绑定ItemsSource它也试图同时绑定SelectedItemCollectionViewSource.SelectedItem。在该绑定完成后,将运行常规SelectedItem绑定,但此时SelectedCompany已设置为null

如果是这种情况,我建议远离CollectionViewSource,并将其绑定到直集合。

+0

感谢您的回答。我需要collectionviewsource进行过滤和排序,但对我来说似乎很奇怪,因为我每次显示对话框时都会创建一个新的视图模型。在我看来,当我关闭对话框时必须保留一些东西。 – klashagelqvist 2012-01-27 14:35:22

+0

如果我使用VS并在构造函数中断开并使objectid可以看到其新的viewmodel。 – klashagelqvist 2012-01-27 14:37:25

+0

@klashagelqvist你能发布更多的代码吗?尤其是创建ViewModel的位数,绑定的对话框以及初始SelectedCompany的设置? – Rachel 2012-01-27 14:47:20

0

在我看来,问题可能是你有不同的window/viewmodel实例,打开一个新的对话框可能会创建一个新的SelectedCompany默认值为null的虚拟机实例。这是你的情况吗?

+0

不,我需要创建一个新的viewmodel,只有当我在之前打开的对话框中选择了一个客户,该问题发生时 – klashagelqvist 2012-01-27 14:41:18

相关问题