我有一个gridView,并将我的ObservableCollection的不同类项绑定到我的中心页。
将不同的类项目绑定到gridView并显示不同的项目数据模板,标题模板。
我在gridview的标题模板中使用了用户控件。
我的标头模板,包括用户控件和用户控件,都包含一些组合框。我想通过pageRoot对象上的参数将pageRoot datacontext集合绑定到headertemplate组合框中。
我正在创建一个用户控件,并创建一些DependencyProperty,组合框事件处理程序。
但是不能将pageRoot DataContext集合绑定到用户控件组合框中:(
我的英语不好,对此很抱歉;)
感谢您的回答。
我的headerdatatemplate:
<DataTemplate x:Key="OrganizationFixtureHeaderTemplate">
<Grid Margin="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}"/>
</StackPanel>
<UserControls:UcCbOrganizationFixtureSelections
Grid.Column="1"
RootElement="pageRoot"
PageOrganizationSource="{Binding PageOrganization, ElementName=pageRoot}"
/>
</Grid>
</DataTemplate>
我的用户控制代码:
<UserControl
x:Class="Modern_UI.Common.UserControls.UcCbOrganizationFixtureSelections"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Modern_UI.Common.UserControls"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal">
<ComboBox x:Name="cbOrgFixtureSeasons"
ItemsSource="{Binding Path=DataContext.Seasons, ElementName=RootElement}"
SelectedValuePath="Id"
DisplayMemberPath="Name"
SelectionChanged="CbOrgFixtureSeasons_OnSelectionChanged"
Width="Auto"
Height="Auto"
/>
<ComboBox x:Name="cbOrgFixtureStages"
ItemsSource="{Binding Path=DataContext.FixtureStages, ElementName=RootElement}"
SelectedValuePath="Id"
DisplayMemberPath="Name"
SelectionChanged="CbOrgFixtureStages_OnSelectionChanged"
Width="Auto"
Height="Auto"
/>
<ComboBox x:Name="cbOrgFixtureRounds"
ItemsSource="{Binding Path=DataContext.FixtureRounds, ElementName=RootElement}"
SelectedValuePath="Id"
DisplayMemberPath="Name"
SelectionChanged="CbOrgFixtureRounds_OnSelectionChanged"
Width="Auto"
Height="Auto"
/>
</StackPanel>
</UserControl>
后面的用户控制代码:
namespace Modern_UI.Common.UserControls
{
public sealed partial class UcCbOrganizationFixtureSelections : UserControl
{
public DependencyProperty RootElementProperty = DependencyProperty.Register("RootElement",
typeof(string),
typeof(
UcCbOrganizationFixtureSelections
),
null);
public DependencyProperty PageOrganizationSourceProperty = DependencyProperty.Register("PageOrganizationSource",
typeof(Organization),
typeof(
UcCbOrganizationFixtureSelections
),
null);
public string RootElement
{
get { return this.GetValue(RootElementProperty) as string; }
set { this.SetValue(RootElementProperty, value); }
}
public Organization PageOrganizationSource
{
get { return this.GetValue(PageOrganizationSourceProperty) as Organization; }
set { this.SetValue(PageOrganizationSourceProperty, value); }
}
public UcCbOrganizationFixtureSelections()
{
this.InitializeComponent();
}
async private void CbOrgFixtureSeasons_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
//loading root page parameter via "PageOrganizationSource" named DependencyProperty.
}
}
最佳答案
我已经解决了代码问题,并添加了一些代码。
1-绑定用户控件的根页DataContext。因为用户控件位于gridview模板内。如果在数据模板的控件内部,请绑定数据模板项源的默认数据上下文。我要不要与itemsource datacontext相关,请绑定根页面datacontext。
在DataTemplate中替换的代码:
<DataTemplate x:Key="OrganizationFixtureHeaderTemplate">
<Grid Margin="6">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<TextBlock Text="{Binding Title}" Style="{StaticResource TitleTextStyle}"/>
</StackPanel>
<UserControls:UcCbOrganizationFixtureSelections
Grid.Column="1"
RootElement="pageRoot"
DataContext="{Binding DataContext, ElementName=pageRoot}"
PageOrganizationSource="{Binding PageOrganization, ElementName=pageRoot}"
/>
</Grid>
</DataTemplate>
2-我替换了用户控件的XAML代码。用户控件的Datacontext现在属于rootPage DataContext。在这种情况下,我可以将每个集合绑定到我的组合框。
替换代码:
<UserControl
x:Class="Lig_TV_Modern_UI.Common.UserControls.UcCbOrganizationFixtureSelections"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<StackPanel Orientation="Horizontal">
<ComboBox x:Name="cbOrgFixtureSeasons"
ItemsSource="{Binding Seasons}"
SelectedValuePath="Id"
DisplayMemberPath="Name"
SelectionChanged="CbOrgFixtureSeasons_OnSelectionChanged"
Width="Auto"
Height="Auto"
/>
</StackPanel>
</UserControl>
感谢您对这个问题的思考。可以在每个元素之间传递此结构,并且可以在没有数据模板项源数据上下文的情况下绑定每个集合。如果使用数据模板并且需要控件的事件处理程序,则可以使用用户控件。
良好的编码天;)
关于user-controls - 如何在HeaderTemplate WinRT XAML中绑定(bind)用户控件的DependencyProperty?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13680238/