2011-08-18 64 views
1

造成的錯誤,我有一個TreeView在Silverlight 4的項目,我想綁定到其的SelectedItem。當我做了綁定的SelectedItem(模式=雙向)其混合拋出一個錯誤,因爲的SelectedItem是隻讀的,這是造成我的XAML不渲染。我從不想設置SelectedItem屬性,我只想知道它何時通過UI交互進行更改。在WPF中,我只需使用Mode = OneWayToSource綁定SelectedItem,但Silverlight不支持該模式(afaik)。Silverlight的樹形的SelectedItem雙向綁定在混合

樹形:

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

有一種解決方法,任何人都使用了?誰知道爲什麼OneWayToSource從Silverlight中省略?

回答

1

這真的只讀的,所以你水溼做到這一點。您可以使用TreeView作爲基礎控件,並使用可綁定SelectedItem的實現來創建CustomTreeView。或者創建自己的行爲(附加屬性)。或者使用一些第三方控制(f.i. telerik)。

+0

我粘貼的XAML不工作在我的軟件,可能是因爲我從來沒有在代碼中設置綁定的屬性。我只對閱讀SelectedItem屬性感興趣,並且對Silverlight似乎不支持這種綁定形式感到沮喪。 –

0

如果你只是想讓你的虛擬機在用戶改變選擇時得到通知,你應該能夠做到你正在做的(雙向綁定)。

我有這個工作在Visual Studio中,所以我建議從那裏嘗試它,可能只是Blend的一個問題。當在XAML編輯器中輸入時,VS intellisense並不建議使用SelectedItem,但它不會阻止它正常工作。

你的虛擬機的綁定屬性肯定是正確的類型(MajorClass的外觀)?

+0

代碼按預期運行。我的問題是它在錯誤列表中顯示爲錯誤,並停止在設計視圖中呈現XAML。 –

0

你需要做的是利用一種互動觸發的,它如下綁定到SelectedItemChanged事件:

<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有關行爲和觸發器的詳細信息。希望這可以幫助。