gpt4 book ai didi

c# - WPF 组合框绑定(bind) : can't change selection

转载 作者:行者123 更新时间:2023-11-30 14:42:39 26 4
gpt4 key购买 nike

在这上面浪费了几个小时之后,紧接着我的 Last Problem , 我开始觉得 Framework 4 是一个微妙的邪恶大师,或者我的 PC 出没了。

我在 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"
  • 将组合框 ItemSourcesIQueryables 更改为 Lists
  • 构建我自己的 Job 对象(使用 INotifyPropertyChanged 的普通实体类)。
  • 组合框的每种绑定(bind)模式。
  • ItemsSource="{Binding}"

Subsonic DAL 没有实现 INotifyPropertyChanged,但我不认为它需要像这样的简单绑定(bind)。我只想能够从下拉列表中选择一些内容并保存。

将它与我的上一个问题(此消息顶部的链接)进行比较,我似乎对正在进行的数据源有一些非常奇怪的事情。也许这是亚音速的东西?

编辑: 出于某种原因,set 访问器仅在 AssetID 属性上命中,并且是第一次命中。 WPF 现在正在走向 WTF :)

编辑 2: 你一定是在跟我开玩笑 - 我已经删除了绑定(bind)(即它只有一个 displaymemberpath,一个 valuememberpath 和一个 itemsouce)而且它还在做!它接受您的第一个选择,然后不会改变。

最佳答案

如果在新选择的对象上调用的 object.Equals() 方法认为当前选择的项目和刚刚选择的项目相等,则 WPF 组合框不会更改选择的项目(即newlyslected.Equals(previoslySelected) ).

覆盖绑定(bind)组合框项目的类上的Equals 方法,应该可以解决您遇到的问题。

关于c# - WPF 组合框绑定(bind) : can't change selection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2962865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com