我错过了什么应该是一个直接的约束,我希望有人可以指出我正确的方向。
我有一个SL应用程序,它有一个名为PeopleView Model的视图模型,其中包含一个人的数量或属性(名称地址等) 该页面由用户控件,文本框和gridview
组成用户控制代码
<frm:LabelFieldContainer Width="145"
Height="42"
Margin="12,12,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
MyContent="{Binding FirstName}"
MyLabel="{StaticResource lblFirstName}" />
<frm:LabelFieldContainer Width="178"
Height="42"
Margin="166,12,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
MyContent="{Binding LastName}"
MyLabel="{StaticResource lblLastName}" />
</Grid>
此容器由另一个用户控件组成,该控件绑定到资源字典以提取标签名称,然后是一个内容字段,该字段将绑定到从我的视图模型(MyContent)返回的属性。这里的目标是创建一个通用控件,显示集合中的标签名称和值。即。名字:John目前,标签用于绑定资源字典,但值的绑定(MyContent)不返回任何内容。
这是MainPage.xaml的xaml
<Grid x:Name="LayoutRoot" Background="White">
<uc:AddressContainer />
<TextBlock Width="200"
Height="50"
Margin="101,71,99,179"
FontSize="12"
Foreground="Black"
Text="{Binding LastName}" />
<telerik:RadGridView Name="GridView1" Margin="0,140,0,6"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
AutoGenerateColumns="True"
IsFilteringAllowed="True">
</telerik:RadGridView>
和mainpage.xaml背后的代码是
public partial class MainPage : UserControl
{
//binding of view model to user control
public PeopleViewModel PeopleView
{
get { return (PeopleViewModel)GetValue(PeopleViewProperty); }
set { SetValue(PeopleViewProperty, value); }
}
// Using a DependencyProperty as the backing store for PeopleView. This enables animation, styling, binding, etc...
public static readonly DependencyProperty PeopleViewProperty =
DependencyProperty.Register("PeopleView", typeof(PeopleViewModel), typeof(MainPage), new PropertyMetadata(new PeopleViewModel()));
public MainPage()
{
InitializeComponent();
this.LayoutRoot.DataContext = PeopleView.AllPeople; //tried this but no luck
this.GridView1.ItemsSource = PeopleView.AllPeople; //bound to a grid view for testing returns
}
我插入一个网格只是为了测试,它返回值很好。但是,我尝试将主视图的DataContext绑定到集合,以便我可以在usercontrol或我在主页面中添加的测试文本块中填充绑定字段。
有人能指出我如何正确地将UIElements绑定到ItemsSource之外的集合。我总是为网格或列表框项目做这个没有问题,但现在试图表示某些东西(UI中的单个字段)我卡住了。 的更新:
经过一段短暂的精神失误之后,我重新启动了,因为我绑定了一个集合,我将usercontrol放入一个列表框,这里是更新的主页xaml
<Grid x:Name="LayoutRoot" Background="White">
<ListBox ItemsSource="{Binding}" Margin="0,0,0,166">
<ListBox.ItemTemplate>
<DataTemplate>
<uc:AddressContainer />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<telerik:RadGridView Name="GridView1" Margin="0,140,0,6"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
AutoGenerateColumns="True"
IsFilteringAllowed="True">
</telerik:RadGridView>
我将mainpage.xaml.cs文件中的数据上下文更新为
public MainPage()
{
InitializeComponent();
this.DataContext = PeopleView.AllPeople; //updated here
}
我在列表框中获得了记录(2)的准确返回,但是在用户控件(内容字段)中仍未发生绑定以显示集合中返回的值
任何指针仍然会受到赞赏。
答案 0 :(得分:2)
找到答案。在之前的测试中,我在UserControl中设置了一个基本模型的数据源。不要问为什么......但是绑定是否覆盖了从主页面设置的绑定。在删除该数据引用之后,UI现在正确地将用户控件绑定到集合。