我在一个WPF表单上有三个组合框和一个文本框,并且我拥有一个开箱即用的Subsonic 3 ActiveRecord DAL。 当我加载此“编辑记录”表单时,组合框会正确填充,它们选择正确的项目,并且文本框具有正确的文本。我可以更改TextBox文本并成功保存记录,但是组合框无法更改。列表会下拉并突出显示,但是单击项目后,所选项目保持不变。
这是我的XAML:
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Asset</TextBlock>
<ComboBox Name="cboAsset" Width="180"
DisplayMemberPath="AssetName"
SelectedValuePath="AssetID"
SelectedValue="{Binding AssetID}" ></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Status</TextBlock>
<ComboBox Name="cboStatus" Width="180"
DisplayMemberPath="JobStatusDesc" SelectedValuePath="JobStatusID"
SelectedValue="{Binding JobStatusID}" ></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Category</TextBlock>
<ComboBox Name="cboCategories" Width="180"
DisplayMemberPath="CategoryName"
SelectedValuePath="JobCategoryID"
SelectedValue="{Binding JobCategoryID}" ></ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="10,10,0,0">
<TextBlock Width="80">Reason</TextBlock>
<TextBox Name="txtReason" Width="380" Text="{Binding Reason}"/>
</StackPanel>
以下是我代码的相关片段(intJobID作为参数传入):
SvcMgrDAL.Job oJob;
IQueryable<SvcMgrDAL.JobCategory> oCategories = SvcMgrDAL.JobCategory.All().OrderBy(x => x.CategoryName);
IQueryable<SvcMgrDAL.Asset> oAssets = SvcMgrDAL.Asset.All().OrderBy(x => x.AssetName);
IQueryable<SvcMgrDAL.JobStatus> oStatus = SvcMgrDAL.JobStatus.All();
cboCategories.ItemsSource = oCategories;
cboStatus.ItemsSource = oStatus;
cboAsset.ItemsSource = oAssets;
this.JobID = intJobID;
oJob = SvcMgrDAL.Job.SingleOrDefault(x => x.JobID == intJobID);
this.DataContext = oJob;
我尝试过以下方法:
- 明确设置
IsReadOnly="false"
和IsSynchronizedWithCurrentItem="True"
- 将下拉框
ItemSources
从IQueryables
更改为Lists
- 构建自己的Job对象(使用
INotifyPropertyChanged
的普通实体类) - 尝试了所有下拉框的绑定模式
ItemsSource="{Binding}"
Subsonic DAL没有实现INotifyPropertyChanged
,但我认为它不需要像这样简单的绑定那样。我只想能够从下拉列表中选择一些内容并保存。
与我的上一个问题进行比较(链接在此消息顶部),我似乎遇到了一些关于数据源的奇怪问题。也许这是Subsonic的问题?
编辑:由于某种原因,仅在AssetID属性上第一次点击时才会触发set访问器。WPF现在变成了WTF :)
编辑2:你开玩笑吧-我已经删除了绑定(即它只有一个displaymemberpath、一个valuememberpath和一个itemssouce),它仍然会出现这种问题!它接受你的第一个选择,然后就不会改变了。
Job.AssetID
的 set 访问器中设置断点了吗?它被触发了吗?当你单步执行时会发生什么?它实际上有改变吗?也许它会抛出一个异常? - Fyodor Soikin