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;
}
}