C# 将IList绑定到DependencyProperty
我用自己的C# 将IList绑定到DependencyProperty,c#,xaml,dependency-properties,C#,Xaml,Dependency Properties,我用自己的dependencPropertyItemsSource创建了自己的自定义控件,它根据绑定列表中提供的项目数量动态创建按钮。创建XAML时,我应该能够通过声明 ItemsSource="{Binding ListOfData}". <ControlTemplate x:Key="FourByTwoGridTemplate" TargetType="GridLayout:FourByTwoGrid"> <Grid> &l
dependencProperty
ItemsSource
创建了自己的自定义控件,它根据绑定列表中提供的项目数量动态创建按钮。创建XAML时,我应该能够通过声明
ItemsSource="{Binding ListOfData}".
<ControlTemplate x:Key="FourByTwoGridTemplate" TargetType="GridLayout:FourByTwoGrid">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="Button0States">
<vsm:VisualState x:Name="Button0Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button0">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button0NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button0">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="Button1States">
<vsm:VisualState x:Name="Button1Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button1">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button1NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button1">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="Button2States">
<vsm:VisualState x:Name="Button2Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button2">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button2NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button2">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Name="Button0" Content="0" Visibility="Hidden" />
<Button Grid.Row="0" Grid.Column="1" Name="Button1" Content="1" Visibility="Hidden" />
<Button Grid.Row="1" Grid.Column="0" Name="Button2" Content="2" Visibility="Hidden" />
<Button Grid.Row="1" Grid.Column="1" Name="Button3" Content="3" Visibility="Hidden" />
<Button Grid.Row="2" Grid.Column="0" Name="Button4" Content="4" Visibility="Hidden" />
<Button Grid.Row="2" Grid.Column="1" Name="Button5" Content="5" Visibility="Hidden" />
<Button Grid.Row="3" Grid.Column="0" Name="Button6" Content="6" Visibility="Hidden" />
<Button Grid.Row="3" Grid.Column="1" Name="Button7" Content="7" Visibility="Hidden" />
</Grid>
</ControlTemplate>
我似乎无法让它显示按钮或显示,数据是否未正确绑定到列表
<ControlTemplate x:Key="FourByTwoGridTemplate" TargetType="GridLayout:FourByTwoGrid">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="Button0States">
<vsm:VisualState x:Name="Button0Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button0">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button0NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button0">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="Button1States">
<vsm:VisualState x:Name="Button1Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button1">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button1NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button1">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="Button2States">
<vsm:VisualState x:Name="Button2Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button2">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button2NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button2">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Name="Button0" Content="0" Visibility="Hidden" />
<Button Grid.Row="0" Grid.Column="1" Name="Button1" Content="1" Visibility="Hidden" />
<Button Grid.Row="1" Grid.Column="0" Name="Button2" Content="2" Visibility="Hidden" />
<Button Grid.Row="1" Grid.Column="1" Name="Button3" Content="3" Visibility="Hidden" />
<Button Grid.Row="2" Grid.Column="0" Name="Button4" Content="4" Visibility="Hidden" />
<Button Grid.Row="2" Grid.Column="1" Name="Button5" Content="5" Visibility="Hidden" />
<Button Grid.Row="3" Grid.Column="0" Name="Button6" Content="6" Visibility="Hidden" />
<Button Grid.Row="3" Grid.Column="1" Name="Button7" Content="7" Visibility="Hidden" />
</Grid>
</ControlTemplate>
[TemplateVisualState(GroupName=“Button0States”,Name=“Button0Visible”)]
[TemplateVisualState(GroupName=“Button0States”,Name=“Button0NotVisible”)]
[TemplateVisualState(GroupName=“Button1States”,Name=“Button1Visible”)]
[TemplateVisualState(GroupName=“Button1States”,Name=“Button1NotVisible”)]
[TemplateVisualState(GroupName=“Button2States”,Name=“Button2Visible”)]
[TemplateVisualState(GroupName=“Button2States”,Name=“Button2NotVisible”)]
[TemplateVisualState(GroupName=“Button3States”,Name=“Button3Visible”)]
[TemplateVisualState(GroupName=“Button3States”,Name=“Button3NotVisible”)]
[TemplateVisualState(GroupName=“Button4States”,Name=“Button4Visible”)]
[TemplateVisualState(GroupName=“Button4States”,Name=“Button4NotVisible”)]
[TemplateVisualState(GroupName=“Button5States”,Name=“Button5Visible”)]
[TemplateVisualState(GroupName=“Button5States”,Name=“Button5NotVisible”)]
[TemplateVisualState(GroupName=“Button6States”,Name=“Button6Visible”)]
[TemplateVisualState(GroupName=“Button6States”,Name=“Button6NotVisible”)]
[TemplateVisualState(GroupName=“Button7States”,Name=“Button7Visible”)]
[TemplateVisualState(GroupName=“Button7States”,Name=“Button7NotVisible”)]
[TemplatePart(Name=“btn0”,Type=typeof(控件))]
[TemplatePart(Name=“btn7”,Type=typeof(控件))]
[TemplatePart(Name=“btnMore”,Type=typeof(控件))]
[TemplateVisualState(GroupName=“MoreButtonStates”,Name=“MoreButtonVisible”)]
[TemplateVisualState(GroupName=“MoreButtonStates”,Name=“MoreButtonNotVisible”)]
公共类FourByTwoGrid:控件
{
公共FourByTwoGrid()
{
this.DefaultStyleKey=typeof(fourbytworgrid);
this.Loaded+=新的RoutedEventHandler(FourByTwoGrid_加载);
this.GotFocus+=新的RoutedEventHandler(FourByTwoGrid_GotFocus);
}
公共IList项目资源
{
获取{返回GetValue(ItemsSourceProperty)作为IList;}
set{Logger.Log(“值集”);SetValue(ItemsSourceProperty,Value);}
}
///
///标识ItemsSource依赖项属性。
///
公共静态只读依赖项Property ItemsSourceProperty=
从属属性。寄存器(
“项目资源”,
类型(IList),
类型(四倍网格),
新的PropertyMetadata(null,OnItemSourcePropertyChanged));
///
///ItemsSourceProperty属性已更改处理程序。
///
///FourByTwoGrid更改了其ItemsSource。
///事件参数。
私有静态void OnItemSourcePropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
{
FourByTwoGrid源=d作为FourByTwoGrid;
如果(源!=null)
{
source.attemptobuildgridui();
}
}
#区域公共数据模板ItemTemplate
///
///获取或设置要在按钮中使用的ItemTemplate。
///
公共数据模板ItemTemplate
{
获取{返回GetValue(ItemTemplateProperty)作为DataTemplate;}
set{SetValue(ItemTemplateProperty,value);}
}
///
///标识ItemTemplate依赖项属性。
///
公共静态只读DependencyProperty ItemTemplateProperty=
从属属性。寄存器(
“项目模板”,
类型(数据模板),
类型(四倍网格),
新的PropertyMetadata(null,OnItemTemplatePropertyChanged));
///
///ItemTemplateProperty属性已更改处理程序。
///
///FourByTwoGrid更改了其ItemTemplate。
///事件参数。
私有静态void OnItemTemplatePropertyChanged(DependencyObject d,DependencyPropertyChangedEventArgs e)
{
FourByTwoGrid源=d作为FourByTwoGrid;
如果(源!=null)
{
source.attemptobuildgridui();
}
}
///
///根据项目是否存在更新按钮的可视状态。
///
私有void UpdateVisualState()
{
//如果有相应的项目,则将按钮设置为可见
var-lastI=0;
如果(ItemsSource!=null)
{
对于(int i=0;i<Core:CoreView
xmlns:Core="clr-namespace:AmebaTV_XBOXApplication.ViewModel"
x:Class="AmebaTV_XBOXApplication.UI.EpisodeGridView"
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:GridLayout="clr-namespace:AmebaTV_XBOXApplication.Controls.GridLayout"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:xbox="clr-namespace:Microsoft.Xbox.Controls;assembly=Microsoft.Xbox"
mc:Ignorable="d"
d:DesignHeight="720" d:DesignWidth="1280"
Title="EpisodeGridView Page">
<Core:CoreView.ViewModel>
<Binding Path="SeriesViewModel" Source="{StaticResource viewModelLocator}"/>
</Core:CoreView.ViewModel>
<Core:CoreView.Resources>
<DataTemplate x:Key="button_template">
<Button Width="50" Height="50" >
<TextBlock Text="Button"/>
</Button>
</DataTemplate>
</Core:CoreView.Resources>
<Grid x:Name="LayoutRoot" Margin="0">
<GridLayout:FourByTwoGrid x:Name="fourbytwogrid"
ItemsSource="{Binding EpisodeList}"
ItemTemplate="{StaticResource button_template}"/>
</Grid>
</Core:CoreView>
<GridLayout:FourByTwoGrid x:Name="fourbytwogrid"
ItemsSource="{Binding EpisodeList}"
ItemTemplate="{StaticResource butemp}"
Template="{StaticResource FourByTwoGridTemplate}" />
<ControlTemplate x:Key="FourByTwoGridTemplate" TargetType="GridLayout:FourByTwoGrid">
<Grid>
<vsm:VisualStateManager.VisualStateGroups>
<vsm:VisualStateGroup x:Name="Button0States">
<vsm:VisualState x:Name="Button0Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button0">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button0NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button0">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="Button1States">
<vsm:VisualState x:Name="Button1Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button1">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button1NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button1">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
<vsm:VisualStateGroup x:Name="Button2States">
<vsm:VisualState x:Name="Button2Visible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button2">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Visible}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
<vsm:VisualState x:Name="Button2NotVisible">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="Button2">
<DiscreteObjectKeyFrame KeyTime="0" Value="{x:Static Visibility.Hidden}"/>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</vsm:VisualState>
</vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Name="Button0" Content="0" Visibility="Hidden" />
<Button Grid.Row="0" Grid.Column="1" Name="Button1" Content="1" Visibility="Hidden" />
<Button Grid.Row="1" Grid.Column="0" Name="Button2" Content="2" Visibility="Hidden" />
<Button Grid.Row="1" Grid.Column="1" Name="Button3" Content="3" Visibility="Hidden" />
<Button Grid.Row="2" Grid.Column="0" Name="Button4" Content="4" Visibility="Hidden" />
<Button Grid.Row="2" Grid.Column="1" Name="Button5" Content="5" Visibility="Hidden" />
<Button Grid.Row="3" Grid.Column="0" Name="Button6" Content="6" Visibility="Hidden" />
<Button Grid.Row="3" Grid.Column="1" Name="Button7" Content="7" Visibility="Hidden" />
</Grid>
</ControlTemplate>