2009-12-11 75 views
1

我有一個每個狀態都有熱點的地圖(在Expression Blend中完成)。我捕獲每個MouseEnter狀態(1到50)。我傳遞到我的域名資料來源:上述使用域數據源將數據綁定到TextBlock

Dim activebox As Path = TryCast(sender, Path) 
    activebox.Fill = mouseOverColor 
    Dim StateID As Integer = CInt(Right(activebox.Name, 2)) 

    Dim _StateContext As New StateContext 
    myDataGrid.ItemsSource = _StateContext.States 
    _StateContext.Load(_StateContext.GetStateByStateIDQuery(StateID.Text)) 

工作正常,爲DataGrid,ListBox和甚至到數據形。

但我創建了一個帶有文本塊的彈出窗口。

popupStatesBox.DataContext = ?????????????? 
    popupStatesBox.IsOpen = True 'popup does open but has no data 

- popupStatesBox.xaml

<Popup x:Name="popupStatsBox" Margin="8,35,0,8" DataContext="{Binding}" 
     IsOpen="false" Width="268" HorizontalAlignment="Left"> 
     <StackPanel x:Name="Layout" Background="Black"> 
<TextBlock x:Name="tbState" Text="{Binding StateName /> 
<TextBlock x:Name="tbAbbrev" Text="{Binding Abbreviation}" /> 
     </StackPanel> 
    </Popup> 

我如何獲得的TextBlocks顯示從_StateContext值。
StackPanel有DataContext但沒有ItemsSource。我錯過了什麼?

+0

你的工作示例是什麼樣的?我很努力地想知道如何使用ListBox來代替彈出窗口。 – AnthonyWJones 2009-12-11 21:40:55

+0

當然,州集合已經有你需要的狀態數據? – AnthonyWJones 2009-12-11 21:52:42

回答

0

假設你已經加載那麼上下文各國收集這可能是諸如此類的事情,你是後: -

popupStatsBox.DataContext = _StateContext.States.FirstOrDefault(Function(s) s.StateID = StateID) 

注意,數據編碼成元素名稱是不是一個很好的做法,看創建一個附加屬性並將狀態ID存儲爲每個路徑的附加屬性。

說實話,我會試圖創建一個從Selector派生的自定義控件來創建一個StatesSelector控件。

您會將ItemsSource屬性綁定到您的States集合。隨着鼠標移動 ,將有關項目從ItemsSource分配給SelectedItem屬性。

但是這可能會讓事情有點過分。

+0

謝謝安東尼。它的工作幾乎和我想象的一樣。在mouseenter上加載數據似乎有延遲。當我用鼠標輸入圖像時,我傳遞一個數字值,彈出窗口不顯示數據。 如果我鼠標然後鼠標再次彈出出現與數據。順便說一句,你提到「說實話我會試圖創建一個來自Selector的自定義控件來創建一個StatesSelector控件。」我在哪裏可以找到有關'...自定義控件...'的更多信息? – tfisher 2009-12-14 04:10:29