使用域数据源将数据绑定到TextBlock

时间:2009-12-11 20:06:32

标签: silverlight binding stackpanel

我有一个包含每个州热点的地图(在Expression Blend中完成)。我捕获状态的每个MouseEnter(1到50)。我把它传递到我的域数据源:

    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))

以上适用于数据网格,列表框甚至数据表单。

但是我创建了一个带有文本块的stackpanel的弹出窗口。

    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>

如何让文本块显示_StateContext中的值 StackPanel有DataContext但没有ItemsSource。我错过了什么?

1 个答案:

答案 0 :(得分:0)

假设您已经在上下文中加载了States集合,那么这可能就是您所追求的: -

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

请注意,将数据编码到元素名称中并不是一个好习惯,请查看创建附加属性并将状态ID存储为每个Path的附加属性。

说实话,我很想创建一个从Selector派生的自定义控件来创建一个StatesSelector控件。

您可以将ItemsSource属性绑定到States集合。随着鼠标的移动 关于将适当的项目从ItemsSource分配给SelectedItem属性。

然而,这可能会让事情变得有点太过分了。