2013-01-23 74 views
2

不相關的東西我是WPF的新手,但對視圖模型中的可觀察集合的綁定列表框控件非常熟悉。將ListBoxItem的內容綁定到與

在我當前的項目中,我們有一個ListBox,用於導航到框架框中的不同頁面。我想向第一個ListBoxItem添加一些顯示信息,以顯示哪些對象(在本例中爲場景)正在處理中(它在前一幀中被選中,在後續幀中可見)。 ListBox本身使用在xaml中定義的靜態列表,所以它不綁定到ViewModel中的任何東西。 CurrentScenario是ViewModel上的一個屬性。我能夠將Label添加到包含此ListBox的同一個窗口中,併成功將CurrentScenario.Id綁定到其內容,並正確更新,因此我知道Binding語句中的路徑應該正確解析。

<ListBox 
    Style="{StaticResource FunctionBackground}" 
    IsSynchronizedWithCurrentItem="True" 
> 
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}"> 
     <ListBoxItem.ContentTemplate> 
      <DataTemplate> 
       <Grid> 
        <Grid.RowDefinitions> 
         <RowDefinition /> 
         <RowDefinition /> 
        </Grid.RowDefinitions> 
        <TextBlock Grid.Row="0" Text="Scenario" /> 
        <TextBlock Grid.Row="1" Text="{Binding Path=CurrentScenario.Id}"/> 
       </Grid> 
      </DataTemplate> 
     </ListBoxItem.ContentTemplate> 
    </ListBoxItem> 
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Parameter</ListBoxItem> 
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Run</ListBoxItem> 
    <ListBoxItem Style="{StaticResource FunctionListBoxItemStyle}" >Results</ListBoxItem> 
</ListBox> 

當我嘗試這個額外的信息添加到列表框中的項目,從我所知道的,列表框項目有字的文本塊下面的空文本塊「場景」。我無法弄清楚爲什麼空的文本框內容沒有顯示綁定屬性的值。當我在第二個文本塊的Text屬性中放置一個普通字符串時,它顯示正確。

我想,或者ListBoxItem內容只設置綁定到與ItemSource相關的屬性,所以它忽略嘗試綁定到其他東西,或者也許有一些基本的WPF,我失蹤。或者兩者都...

如果有人有任何想法,謝謝!

回答

1

因此,如果屬性CurrentScenario在ViewModel中,則可以使用RelativeSource來綁定到此屬性。

... 
<TextBlock Grid.Row="0" Text="Scenario" /> 
<TextBlock Grid.Row="1" Text="{Binding Path=DataContext.CurrentScenario.Id, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"/> 
... 
+0

完全按照您的要求工作。謝謝! – user2004495

+0

完全按照您的工作原理工作。謝謝! 還有一個問題,我是否需要放入這個額外的管道,因爲WPF需要額外的ListBoxItem方向,因爲我沒有以傳統方式使用它?我真的希望它按照我的方式工作,我只是想更好地理解它。 再次感謝! – user2004495

相關問題