2009-12-11 85 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