2013-07-28 23 views
0

我正在嘗試製作TreeView,它使用的是ItemTemplate,並且還綁定到具有IsSelected屬性的視圖模型。如何在TreeView上使用ItemTemplate時對樣式進行數據綁定

我不完全確定爲什麼這不起作用,所以我很抱歉如果問題似乎模糊。

我也減少了代碼,我認爲是問題,因爲我的應用程序有更多XAML,所以我希望我所包含的是足夠的。

這裏是我如何定義我的DataTemplate:

<DataTemplate x:Key="ElementDataTemplate"> 
     <Label Content="{Binding Path=DisplayText}"></Label> 
    </DataTemplate> 

下面是我如何使用它:

 <TreeView ItemsSource="{Binding Elements}" 
       ItemTemplate="{DynamicResource ElementDataTemplate}"> 
       <TreeView.Resources> 
        <Style TargetType="ListBoxItem"> 
         <Setter Property="IsSelected" 
           Value="{Binding Path=IsSelected, Mode=TwoWay}" /> 
         </Style> 
       </TreeView.Resources> 
     </TreeView> 

我的視圖模型具有DisplayText和IsSelected屬性。

我知道我正確地綁定到ViewModel,因爲我看到了與我的數據上下文的Elements屬性中相同數量的項目,並且我的Label的Coutent正確設置爲DisplayText-我已驗證了這一點通過吸氣劑的斷點和我運行應用程序時的視覺效果。

但是,ViewModel上的IsSelected屬性的getter永遠不會被調用(從來沒有命中斷點),所以很明顯我已經搞亂了IsSelected屬性的綁定。

我應該指出,當我運行應用程序時,我可以用鼠標選擇項目,並且它們可視化地反映選擇,所以TreeView項目本身被選中,它只是不綁定到ViewModel的IsSelected屬性。任何幫助將非常感激!

回答

0

啊,我很愚蠢!我花了永遠試圖弄清楚它是什麼,來這裏的幾個小時後,最後想通了:

<TreeView.ItemContainerStyle> 
     <Style TargetType="TreeViewItem"> 
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/> 
     </Style> 
    </TreeView.ItemContainerStyle> 

我所用「一個ListBoxItem」,而不是「樹型視圖」。複製/粘貼得到了我最好的。

相關問題