将Silverlight ccontrol文本框绑定到定义为静态资源的域上下文

时间:2010-07-14 10:52:15

标签: silverlight-4.0

我将域上下文定义为用户资源

<UserControl.Resources>
    <my:ParkDomainContext x:Key="parkDomainContext" />
</UserControl.Resources>

我已经将查询结果限制在我的代码

后面的这个域上下文中
_parkDomainContext = this.Resources["parkDomainContext"] as ParkDomainContext;
_parkDomainContext.Load(_parkDomainContext.GetLocationsQuery(), LoadLocationComplete, null);
_parkDomainContext.Load(_parkDomainContext.GetParksQuery(), LoadParkComplete, null);

在此之后,我将静态域上下文绑定到组合框,如下所示

<ComboBox x:Name="cboLocation" Grid.Column="1" Grid.Row="1"  
          ItemsSource="{Binding Path=Locations, Source={StaticResource parkDomainContext}}"
          SelectedItem="{Binding Path=Locations, Mode=TwoWay}"
          DisplayMemberPath="ParkLocation"
    />

它工作正常,但是当我将相同的域上下文绑定到文本框时,如下所示:

<TextBox Grid.Column="1" Grid.Row="0" Height="23" HorizontalAlignment="Left" Margin="3" Name="locationIDTextBox"
         VerticalAlignment="Center" Width="120"
         Text="{Binding Source={StaticResource parkDomainContext}, Path=Locations.ParkLocation}" >

它没有向我显示任何结果。

我知道我的域上下文有查询结果,并且将它绑定到Textbox一定有问题。

让我知道解决方案..

1 个答案:

答案 0 :(得分:0)

你需要在一个变量中保存当前位置并将文本框绑定到它。相反,你现在拥有的是ComboBox.SelectedItem绑定到位置列表(这将无法工作)。

OP评论后编辑: 添加到<UserControl.Resources>

<my:Location x:Key="currentLocation" />

然后将ComboBox更改为:

SelectedItem="{Binding Source={StaticResource currentLocation}, Mode=TwoWay}"

然后是TextBox:

Text={Binding Source={StaticResource currentLocation}, Mode=TwoWay}"

注意:

  1. 请更改类型名称和 您的实际位置的命名空间 输入
  2. 这不是真的 做推荐的做事方式。 通常,你有一个班级 XAML的必要属性 并设置你的DataContext UserControl(或Window)到 这个类的实例。