Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Silverlight中绑定ComboBox.SelectedItem(更多)_Silverlight_Data Binding_Combobox_Selecteditem - Fatal编程技术网

在Silverlight中绑定ComboBox.SelectedItem(更多)

在Silverlight中绑定ComboBox.SelectedItem(更多),silverlight,data-binding,combobox,selecteditem,Silverlight,Data Binding,Combobox,Selecteditem,关于我先前的问题: 我有一个这样绑定的组合框: <ComboBox x:Name="PART_CommentaryList" HorizontalAlignment="Left" Margin="3" ItemsSource="{Binding Path=CurrentVideo.Commentaries}" SelectedItem="{Binding Path=CurrentCommentary, Mode=TwoWay}"> 对我来说,

关于我先前的问题:

我有一个这样绑定的组合框:

<ComboBox x:Name="PART_CommentaryList" 
    HorizontalAlignment="Left" 
    Margin="3" 
    ItemsSource="{Binding Path=CurrentVideo.Commentaries}" 
    SelectedItem="{Binding Path=CurrentCommentary, Mode=TwoWay}">
对我来说,这似乎是一个组合框错误。我可以在CurrentCommentation之前验证CurrentVideo是否已更改,因此所选项目应始终是列表中的项目


与此相关,我真的不希望Mode=TwoWay,因为当ItemsSource被更改时,SelectedItem临时为null,这会在我的模型中被设置回原位,而我实际上并不希望这样。但是绑定在其他方面根本不起作用(这似乎是另一个bug)。

Combobox是一个非常有缺陷的SL控件:-(

在我的例子中,我放弃了selected item declarativa绑定,并使用了讨厌的编码方法……虽然很难看,但很有效:


Braulio

我不久前也遇到了同样的问题,从我所知道的情况来看,当ItemSource被更改时,ComboBox中出现了一个bug,它的布局有问题,并且滚动得很糟糕

通过在设置ItemSource和SelectedItem之间调用ComboBox.UpdateLayout,可以解决此问题

我不久前在一个博客上写过这个问题


我还没有验证Silverlight 3 Beta版是否仍然存在问题,感谢上面的建议。在我的情况下,我可以选择“核选项”,即——每当所选项目需要更改时,我都会完全销毁组合框,创建一个新的组合框,并适当地设置其SelectedItem


荒谬,但它确实有效。

这是ComboBox控件中的一个错误,与更改ItemsSource绑定的指针有关。我找到的解决方案是:

1) 始终将ItemsSource绑定到可观察的集合,并且从不重置OC的指针

<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyItem}" />
好:

2) 在清除MyList之前,设置MyItem=null


在您的情况下,无论何时更改CurrentView,都会更改列表的引用。因此,如果SelectedItem不为null,则会有一个短暂的时间重置ItemsSource,ComboBox的内部正在尝试在新ItemsSource中定位SelectedItem对象,但旧对象不在那里。

有趣的帖子,但这似乎与我的问题无关。不过,我确实了解了DisplayMemberPath。之前我设置了一个新的DataTemplate,只是为了显示项目的属性。使用UpdateLayout是一个很好的方法,但我尝试了一下,结果还是出现了相同的错误。我在代码中或通过绑定设置SelectedItem时得到它。在博客中的示例中,您绑定到一个属性,getter在获取时动态创建一个新的OC。这将在每次计算ItemsSource绑定时更改其使用的指针。更稳定的方法是声明OC,并向其中添加项目。另外,通过动态构造OC,即使使用OC也没有意义,您也可以使用列表。同意,最后我使用了这样的模型,但是在更改项目源时,这仍然是一个需要注意的错误。您是否检查以确保CurrentVideo.Commentaries列表中仍然存在CurrentCommentation,因为如果不是,然后您将得到这个错误。我在两个绑定属性中都注入了一个转换器,以检查所选项目是否确实在itemssource中。问题似乎是:ItemsSource发生了变化。该更改会导致SelectedItem变为null。SelectedCommentation更改为null,因为它是双向绑定。应用程序将SelectedCommentation设置为正确的值,此值肯定在ItemsSource中。错误发生了。如果绑定模式不是双向的,则不会出现错误,但不会选择正确的项目。感谢@markti的建议。我的Windows8.1商店应用程序中也出现了同样的错误,这让我不得不接受治疗。有趣的是,我只是使用了同样的方法,这种方法在不同的视图中工作得非常好,我的组合框的ItemsSource绑定到一个列表,而不是一个ObservableCollection。我最好回去,在那里换一下。
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyItem}" />
MyList = new ObservableCollection();
MyList.Clear();
MyList.AddRange(...);