gpt4 book ai didi

Silverlight SelectedIndex 未正确数据绑定(bind)

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

我有我想做的独特行为。

我有一个组合框,它数据绑定(bind)到 View 模型项列表。第一项是“[选择项目]”。预期的行为是,当用户选择一个项目时,我会做一些事情,然后将索引重置回第一个项目。

这有效,除了如果您想连续选择第 3 项,则连续 2 次。这是代码:
项目 View 模型:

// NOTE, I have all the INotify goo actually implemented, this is the shorthand
// without goo to make it more readable.
public class ItemViewModel : INotifyPropertyChanged
{
public string Caption { get; set; }
public string Test { get; set; }
}

ViewModel:(我所有的属性都在集合中酌情调用 OnPropertyChanged)
public class ViewModel : INotifyPropertyChanged
{
public ObservableCollection<ItemViewModel> ChildItems { get; set; }
public int SelectedChildIndex { get; set; }
public string DebugOutText { get; set; }

public ViewModel()
{
ChildItems = new ObservableCollection<ItemViewModel>();
SelectedChildIndex = -1;
DebugOutText = string.Empty;
}
public void LoadChildItems()
{
ChildItems.Add(new ItemViewModel { Caption = "[ Select Item ]" });
ChildItems.Add(new ItemViewModel { Caption = "One", Test = "Item 1" });
ChildItems.Add(new ItemViewModel { Caption = "Two", Test = "Item 2" });
ChildItems.Add(new ItemViewModel { Caption = "Three", Test = "Item 3" });
SelectedChildIndex = 0;
}
private void OnPropertyChanged(string propName)
{
if (propName == "SelectedChildIndex") { this.OnSelectedChildIndexChanged(); }
if (this.PropertyChanged != null)
{ this.PropertyChanged(this, new PropertyChangedEventArgs(propName)); }
}
public void OnSelectedChildIndexChanged()
{
if (SelectedChildIndex <= 0) return;
DebugOutText += "\r\n" + ChildItems[SelectedChildIndex].Test;
SelectedChildIndex = 0; // <- BIG ISSUE HERE
}
}

现在我的xml:
<StackPanel HorizontalAlignment="Left">
<ComboBox Width="200" x:Name="combo"
ItemsSource="{Binding Path=ChildItems}"
SelectedIndex="{Binding Path=SelectedChildIndex, Mode=TwoWay}"
DisplayMemberPath="Caption" />
<TextBlock Text="{Binding Path=DebugOutText}"/>
</StackPanel>

最后我的应用程序启动:
var vm = new ViewModel();
vm.LoadChildItems();
this.RootVisual = new MainPage { DataContext = vm };

repo 步骤是:
  • 运行它
  • 选择组合并单击/选择“两个”。
  • 现在,单击组合。视觉样式将显示“Two”被突出显示(“[ Select Item ]”应该被突出显示)。如果您单击/选择“两个”,则不会发生任何事情。

  • 我已经放了一些跟踪代码,组合的 SelectedIndex 为 0,ViewModel.SelectedChildIndex 为 0,但组合的 SelectionChanged 不会触发,除非我选择其他内容。

    我不确定如何让它工作。任何帮助将不胜感激。

    最佳答案

    我不得不承认我对你想要的行为的可用性有怀疑。尽管如此,如果您必须为此目的使用组合框,请尝试替换该行

        SelectedChildIndex = 0;


        Deployment.Current.Dispatcher.BeginInvoke(() => SelectedChildIndex = 0);

    关于Silverlight SelectedIndex 未正确数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365522/

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