Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 组合框触发器_C#_Wpf_Xaml_Combobox - Fatal编程技术网

C# 组合框触发器

C# 组合框触发器,c#,wpf,xaml,combobox,C#,Wpf,Xaml,Combobox,我有一个包含组合框的对话框 <ComboBox Margin="0,1,34,36" Grid.Row="1" Grid.Column="1" ItemsSource ="{Binding Path=CompanyView}" DisplayMemberPath="CompanyName" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding Path=SelectedCompany}"

我有一个包含组合框的对话框

  <ComboBox Margin="0,1,34,36" Grid.Row="1" Grid.Column="1" ItemsSource ="{Binding Path=CompanyView}" DisplayMemberPath="CompanyName"  IsSynchronizedWithCurrentItem="True"
              SelectedItem="{Binding Path=SelectedCompany}"
我可以打开和关闭对话框任意次数,没有任何问题。我的问题是
如果我在“公司”组合框中选择一个项目,然后关闭对话框,当我再次打开对话框时,表单会尝试设置SelectedCompany,在本例中,我将其设置为null。我可以检查空值,但我更愿意理解为什么会发生这种情况。

在我看来,问题可能是您有不同的window/viewmodel实例,打开一个新对话框可能会创建一个新的VM实例,它的selectedCompany默认值为空值。这是您的情况吗?

最可能的原因是
CollectionViewSource
跟踪其自己的SelectedItem,并且该项可能为
null
。因此,当它绑定
ItemsSource
时,它还试图将
SelectedItem
绑定到
CollectionViewSource。同时选择editem
。绑定完成后,常规的
SelectedItem
绑定将运行,但此时
SelectedCompany
已设置为
null


如果是这种情况,我建议不要使用
CollectionViewSource
,而是直接绑定到一个集合。

谢谢你的回答。我需要collectionviewsource进行过滤和排序,但这对我来说似乎很奇怪,因为每次显示对话框时,我都会创建一个新的viewmodel。在我看来,当我关闭对话框时,一定保留了一些东西。如果我使用VS并打断构造函数并生成objectid,我可以看到它是一个新的viewmodel。@klashagelqvist您能发布更多的代码吗?尤其是创建ViewModel、绑定对话框和设置初始SelectedCompany的位?使其正常工作似乎是使用CollectionView源时的一种方法。我用不同的问题尝试了不同的解决方案。感谢您为我指明了正确的方向不,我需要创建一个新的viewmodel,只有当我在之前打开的对话框中选择了一个客户时,问题才会出现
  private Company selectedCompany;
       public Company SelectedCompany
       {

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