gpt4 book ai didi

wpf - 组合框未正确绑定(bind)到 SelectedItem

转载 作者:行者123 更新时间:2023-12-03 17:21:51 24 4
gpt4 key购买 nike

我有两个项目。一个正在工作,另一个没有,但是它们之间的差异并不是我认为“应该”有任何重要性的。第一个项目是损坏的,这是我正在尝试修复的项目。第二个项目是我在第一个项目根本不起作用时创建的一个小示例项目。当然,样本工作得很好。

这是第一个项目的 View 。我删除了一堆“MainWindowTabControlStyle”,因为它只是损坏的组合框。我有理由确定问题不在于样式,因为它是来自正在运行的项目的复制和粘贴。

<Grid> 
<TabControl Style="{DynamicResource MainWindowTabControlStyle}">
<TabItem Header="Tab 1"/>
<TabItem Header="Tab 2"/>
</TabControl>
</Grid>

<Style x:Key="MainWindowTabControlStyle" TargetType="{x:Type TabControl}">
...
<ComboBox
HorizontalAlignment="Right"
VerticalAlignment="Top"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Path=Subscriptions, Mode=Default}"
SelectedItem="{Binding Path=SelectedSubscription, Mode=OneWayToSource}"
ItemTemplate="{DynamicResource SubscriptionsItemTemplate}"/>
...
</Style>

<DataTemplate x:Key="SubscriptionsItemTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=DisplayName, Mode=Default}"/>
</StackPanel>
</DataTemplate>

这是设置为 MainWindow 的 DataContext 的 View 模型。 ViewModelBase 类与 Josh Smith 在本月 MSDN 文章中编写的代码完全相同。
public sealed class MainWindowViewModel : ViewModelBase 
{
public MainWindowViewModel()
{
}

private ObservableCollection<Subscription> subscriptions;
public ObservableCollection<Subscription> Subscriptions
{
get
{
if (subscriptions == null)
{
subscriptions = new ObservableCollection<Subscription>();
subscriptions.Add(new Subscription() { DisplayName = "ABC" });
subscriptions.Add(new Subscription() { DisplayName = "XYZ" });
subscriptions.Add(new Subscription() { DisplayName = "PDQ" });
}

return subscriptions;
}
set { subscriptions = value; }
}

private Subscription selectedSubscription;
public Subscription SelectedSubscription
{
get { return selectedSubscription; }
set { selectedSubscription = value; }
}
}

当我从调试器运行项目时,第一个调用的想法是订阅集合的 getter。然后在 SelectedSubscription 上调用 setter(它为空)。之后,我可以更改组合框中的选定项目,直到我的脸变成蓝色并且 SelectedSubscription 属性的 setter 不会再次更改。请务必注意,组合框确实包含正确的值。

在第二个项目中,代码是相同的,但首先调用的是 SelectedSubscription 属性的 setter(它为 null),然后调用 Subscriptions 集合的 getter,最后第二次调用 SelectedSubscription 的 setter,它具有与 Subscriptions 集合中的第一项匹配的值。

如果您有任何想法我愿意尝试,这颗小 gem 花了我大约 5 个小时。

谢谢

最佳答案

可能改变

SelectedItem="{Binding Path=SelectedSubscription, Mode=OneWayToSource}" 


SelectedItem="{Binding Path=SelectedSubscription, Mode=TwoWay}" 

关于wpf - 组合框未正确绑定(bind)到 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/552149/

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