2012-08-16 35 views
0

讓我簡單介紹一下我的問題。DataTrigger在ListBox.ItemTemplate中不起作用

我有一個窗口,有一個ViewModel作爲數據上下文。該窗口中還有2個用戶控件。這些用戶控件具有綁定到ViewModel中的屬性的各種xaml對象,並且我沒有任何其他屬性的問題。

我遇到的問題是我創建的數據觸發器不會觸發。您可以在下面看到我嘗試過的數據觸發器的xaml:

注意: IsBold是ViewModel中用於窗口的屬性。我的印象是,窗口中的用戶控件將繼承父項的數據上下文,所以我不認爲這是我的問題。

<ScrollViewer > 
     <ListBox 
      ItemsSource="{Binding Path=Listings}" 
      SelectionMode="Single" 
      SelectedValue="{Binding Path=SelectedListingItemID}" 
      SelectedValuePath="ItemID" 
      Grid.IsSharedSizeScope="True"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <TextBlock> 
          <TextBlock.Style> 
           <Style TargetType="TextBlock"> 
            <Setter Property="Text" Value="NotTriggered" /> 
            <Style.Triggers> 
             <DataTrigger Binding="{Binding Path=IsBold}" Value="True"> 
              <Setter Property="Text" Value="Triggered" /> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </TextBlock.Style> 
         </TextBlock> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
    </ScrollViewer> 

當我運行這一點,我會得到輸出語句:

BindingExpression路徑錯誤:在 '對象' '' DataRowView的」

此消息導致未找到 '的DataContext' 屬性我相信我需要將數據觸發器移動到xaml的另一部分,以便它意識到該屬性來自ViewModel而不是ListBoxItem,但我該如何移動它?或者,即使是正確的做法?

我希望我在所有必要的領域都足夠清楚,但如果我不是,我當然可以在需要的地方詳細說明。

感謝您的幫助!

+0

如果你逐個行註釋掉,錯誤最終會消失,並在什麼行?該錯誤消息似乎與顯示的代碼無關。 – Josh 2012-08-16 16:28:06

+0

這本身並不是一個錯誤。當我運行程序時,它在輸出窗口中顯示一個綁定錯誤。如果我註釋掉了這些行,那麼綁定就不會發生。 – khrave 2012-08-16 16:38:59

回答

0

最簡單的事情就是用relative source property,你可以從你的窗口的DataContext的使用FindAncestor模式和窗口AncestorType,這樣的檢查IsBold:

<DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type Window}, Path=IsBold}" Value="True"> 
    <Setter Property="Text" Value="Triggered" /> 
</DataTrigger> 
+0

我不得不大量修改你寫的代碼,但是你的鏈接讓我走上正確的道路來解決我遇到的問題。但是,我現在有一個相關但更難的問題,可能需要另一個問題。 – khrave 2012-08-16 16:49:55

+0

很高興幫助:) – 2012-08-16 16:53:03