【问题标题】:WP7 binding from ListBoxItem style to other than listbox itemsource propertyWP7 从 ListBoxItem 样式绑定到非列表框 itemsource 属性
【发布时间】:2012-07-26 12:27:43
【问题描述】:

我在 viewmodel 中有这样的属性:

public class TestObject
{
    public Color Color { get; set; }
    public IList<Items> { get; set; }
    ...
}

视图中的列表框如下:

<ListBox ItemsSource="{Binding TestObject.Items}" ....

和这样的列表框样式:

<Style TargetType="ListBoxItem">
           ...
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Border x:Name="LayoutRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" VerticalAlignment="{TemplateBinding VerticalAlignment}">
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="SelectionStates">
                                    <VisualState x:Name="Unselected"/>
                                    <VisualState x:Name="Selected">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentContainer" Storyboard.TargetProperty="Foreground" Duration="0">
                                                <DiscreteObjectKeyFrame  KeyTime="0">
                                                    <DiscreteObjectKeyFrame.Value>
                                                        <SolidColorBrush Color="{**Binding to TestObject.Color ???}**" />
                                                    </DiscreteObjectKeyFrame.Value>
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="Background" Duration="0">
                                                <DiscreteObjectKeyFrame  KeyTime="0">
                                                    <DiscreteObjectKeyFrame.Value>
                                                        <SolidColorBrush Color="{**Binding to TestObject.Color ???}**"/>
                                                    </DiscreteObjectKeyFrame.Value>
                                                </DiscreteObjectKeyFrame>
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>

...

那么请...我如何绑定 ItemsSource 绑定?

【问题讨论】:

    标签: windows-phone-7 xaml binding


    【解决方案1】:

    我不确定您问题的控制样式部分...但一般来说,如果我想绑定到当前项目之外的东西,那么我会使用 ElementName 技巧使其工作 - 例如

     <Grid Name='RootLayout'>
         <ListBox ItemsSource='{Binding Items}'>
              <ListBox.ItemTemplate>
                   <DataTemplate>
                        <TextBlock Text="{Binding Title}" Foreground="{Binding DataContext.PriorityColor, ElementName=RootLayout}" />
                   </DataTemplate>
              </ListBox.ItemTemplate>
         </ListBox>
     </Grid>
    

    我通常也不会将 Color 直接包含在我的 ViewModel 中,而是使用如下转换器:

     <TextBlock Text="{Binding Title}" Foreground="{Binding DataContext.Priority, ElementName=RootLayout, Converter={StaticResource PriorityToColorConverter}}" />
    

    如果您正在创建跨平台视图模型,这将特别有用 - 因为 Color 和 Brush 类不在 WP7 和 WinRT 之间共享,更不用说在 MonoTouch 和 MonoDroid 之间共享了。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多