Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误

Posted

技术标签:

【中文标题】Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误【英文标题】:Silverlight Treeview SelectedItem TwoWay binding causing error in blend 【发布时间】:2011-10-29 23:51:28 【问题描述】:

我在 Silverlight 4 项目中有一个 Treeview,我想绑定到它的 SelectedItem。当我对 SelectedItem (Mode=TwoWay) 进行绑定时,它会在混合中引发错误,因为 SelectedItem 是只读的,这导致我的 XAML 无法呈现。我不想设置 SelectedItem 属性,我只想知道它何时通过 UI 交互发生变化。在 WPF 中,我只使用 Mode=OneWayToSource 绑定其 SelectedItem,但 Silverlight 不支持该模式 (afaik)。

树视图:

<controls:TreeView ItemsSource="Binding Repository.MajorClasses" SelectedItem="Binding SelectedItem, Mode=TwoWay" />

是否有任何人使用过的解决方法?还有谁知道为什么 Silverlight 中省略了 OneWayToSource?

【问题讨论】:

【参考方案1】:

您需要做的是使用交互触发器并将其绑定到SelectedItemChangedevent,如下所示:

  <sdk:TreeView x:Name="ModuleNavigationItemWrappersTreeView" ItemsSource="Binding ModuleNavigationItemWrappers">
                        <sdk:TreeView.ItemTemplate>
                            <sdk:HierarchicalDataTemplate ItemsSource="Binding Children">
                                <StackPanel Orientation="Horizontal" Margin="0,2,0,2">
                                    <Image Source="/VanguardFinancials.Common;component/Images/icons/flag_blue.png" />
                                    <TextBlock Margin="2,0,0,0" Text="Binding ItemDescription"></TextBlock>
                                </StackPanel>
                            </sdk:HierarchicalDataTemplate>
                        </sdk:TreeView.ItemTemplate>
                        <interactivity:Interaction.Triggers>
                            <interactivity:EventTrigger EventName="SelectedItemChanged">
                                <interactivity:InvokeCommandAction Command="Binding TrackSelectedModuleNavigationItemWrapper" CommandParameter="Binding ElementName=ModuleNavigationItemWrappersTreeView" />
                            </interactivity:EventTrigger>
                        </interactivity:Interaction.Triggers>
                    </sdk:TreeView>

访问this 了解有关行为和触发器的更多信息。希望这会有所帮助。

【讨论】:

【参考方案2】:

如果您只想在用户更改选择时通知您的虚拟机,您应该能够完全按照您正在做的事情(双向绑定)。

我在 Visual Studio 中有这个工作,所以我建议从那里尝试,可能只是 Blend 的问题。 VS intellisense 在 XAML 编辑器中输入时不建议 SelectedItem,但这并不会阻止它工作。

VM 中的绑定属性肯定是正确的类型(从外观上看是 MajorClass)?

【讨论】:

代码按预期运行。我的问题是它在错误列表中显示为错误并阻止 XAML 在设计视图中呈现。【参考方案3】:

它真的是只读的,所以你不能这样做。您可以使用 TreeView 作为基本控件并使用可绑定 SelectedItem 的实现创建 CustomTreeView。或创建自己的行为(附加属性)。或者使用一些第三方控制(f.i.telerik)。

【讨论】:

我粘贴的 XAML 在我的软件中确实有效,可能是因为我从未在代码中设置绑定属性。我只对阅读 SelectedItem 属性感兴趣,只是对 Silverlight 似乎不支持这种形式的绑定感到沮丧。

以上是关于Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误的主要内容,如果未能解决你的问题,请参考以下文章

如何布局 Silverlight 应用程序?

WPF和Silverlight区别

sele $ 用法

如何安装Silverlight Tools 4

c# treeview 字体大小

缺少 Silverlight“业务应用程序”模板