none
WP F 无法实现二级数据绑定吗?还是没有用明白!? RRS feed

  • 问题

  • 一个复合控件具有itenssource属性的

    设置了数据源dataset 设置了模板

    模板中的控件又是复合控件 有设置了模板

    在这第二次 才是真正的赋值控件image控件 如何把数据源绑定到这个最里层的控件上???

     


    vc815
    2011年12月16日 13:10

答案

  • 你好,

    根据你的描述,在做第二层绑定的时候,需要绑定的内容已经不存在于DataContext中了,这时可以“自行指定绑定源。如ElementName, Source, RelativeSource等。”而不使用DataContext。

    具体到你这里的情况,应该可以通过RelativeSource解决。差不多像这样:

    {Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=命名空间前缀:scaterview}, Path=DataContext.绑定到另外一个表的路径}
    

     


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    2011年12月22日 3:14
    版主

全部回复

  • 没解释明白吗?

    期待有人回复。。。


    vc815
    2011年12月18日 2:55
  • ......

    <Setter Property="Template">
       <Setter.Value>
        <ControlTemplate TargetType="{x:Type local:EricAppleButton}">
           <Image
            x:Name="ImageIcon"
            Height="{TemplateBinding EricIconSize}"
            Width="{TemplateBinding EricIconSize}"
            Source="{TemplateBinding EricIconSource}"
            Margin="{TemplateBinding EricMargin}"
            />

    ......

    我猜测,你的问题应该可以通过 {TemplateBinding xxx }来实现。

    或者,通过编写代码的方式,来实现。

     

     

    控件生成都是通过模板 itemtemplate 实现

    绑定的数据就是一个dataset或datatable 绑定到父控件上。


    vc815
    2011年12月18日 13:54
  • <DataGrid>  
      <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Index}" Header="序号" />
        <DataGridTextColumn Binding="{Binding ProjectName}" Header="项目"/>
        <local:EricDataGridTemplateColumn Header="任务" HeaderStyle="{StaticResource DataGridHeaderStyle}">
          <local:EricDataGridTemplateColumn.CellTemplate>
            <DataTemplate>
              <StackPanel Name="StackPanel" Orientation="Horizontal">
                <TextBox Name="TextBox1" Text="{Binding TaskName}"/>
    <strong>            <local:EricGridCell EricIcon="{Binding Icon}" EricText="{Binding TaskName}" />
    </strong>          </StackPanel>
            </DataTemplate>
        </local:EricDataGridTemplateColumn.CellTemplate>
        <local:EricDataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
              <TextBox Text="{Binding TaskName}" BorderThickness="0"/>
             </DataTemplate>
          </local:EricDataGridTemplateColumn.CellEditingTemplate>
        </local:EricDataGridTemplateColumn>
      </DataGrid.Columns>
    </DataGrid>
    
    

    <strong>其中:local:EricGridCell 是User Control</strong>
    

    你要的是这个效果吗?
    

    2011年12月18日 15:02
  • 你好,

    数据绑定成功与否无非就是要设置正确的源(DataContext或是由Binding自己指定)和路径。

    对一个ItemsControl来说,它会把每个ItemContainer的DataContext设为对应的那条数据。ItemTemplate创建出来的元素就是放在ItemContainer里的。这样就能很方便的对逐行数据的绑定。

    至于嵌套多层,都是一样的,只是根据你ItemsSource设置的集合一层层分配罢了。

    如果你要绑定的对象不在对应的DataContext中,就需要自行指定绑定源。如ElementName, Source, RelativeSource等。

    要是你还是搞不定的话,可以把XAML中绑定的层次关系和绑定源的成员结构具体地告诉我们,我们才能给出具体的建议。

     

     


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    2011年12月19日 7:59
    版主
  •  

    <DataGrid>  
      <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Index}" Header="序号" />
        <DataGridTextColumn Binding="{Binding ProjectName}" Header="项目"/>
        <local:EricDataGridTemplateColumn Header="任务" HeaderStyle="{StaticResource DataGridHeaderStyle}">
          <local:EricDataGridTemplateColumn.CellTemplate>
            <DataTemplate>
              <StackPanel Name="StackPanel" Orientation="Horizontal">
                <TextBox Name="TextBox1" Text="{Binding TaskName}"/>
    <strong>            <local:EricGridCell EricIcon="{Binding Icon}" EricText="{Binding TaskName}" />
    </strong>          </StackPanel>
            </DataTemplate>
        </local:EricDataGridTemplateColumn.CellTemplate>
        <local:EricDataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
              <TextBox Text="{Binding TaskName}" BorderThickness="0"/>
             </DataTemplate>
          </local:EricDataGridTemplateColumn.CellEditingTemplate>
        </local:EricDataGridTemplateColumn>
      </DataGrid.Columns>
    </DataGrid>
    
    

     

    <strong>其中:local:EricGridCell 是User Control</strong>
    

     

    你要的是这个效果吗?
    

     

    好像是这个意思  !数据绑定设置 是怎么设置?

    能否给出完整的列子 谢谢


    vc815
    2011年12月19日 12:27
  • 你好,

    数据绑定成功与否无非就是要设置正确的源(DataContext或是由Binding自己指定)和路径。

    对一个ItemsControl来说,它会把每个ItemContainer的DataContext设为对应的那条数据。ItemTemplate创建出来的元素就是放在ItemContainer里的。这样就能很方便的对逐行数据的绑定。

    至于嵌套多层,都是一样的,只是根据你ItemsSource设置的集合一层层分配罢了。

    如果你要绑定的对象不在对应的DataContext中,就需要自行指定绑定源。如ElementName, Source, RelativeSource等。

    要是你还是搞不定的话,可以把XAML中绑定的层次关系和绑定源的成员结构具体地告诉我们,我们才能给出具体的建议。

     

     


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us


    顶层控件scaterview想绑定个dataset

    之后根据dataset其中的表数据生成相应的项scaterviewitem

    其中scaterviewitem中是个LibraryContainer 这样的负责控件 这个控件中的itemtemplte绑定数据就是最外层的dataset中 另外一个表的数据 ,根据这数据生成itemtemplte 相应的控件!

    大致这样的绑定需求!

    谢谢


    vc815
    2011年12月19日 12:31
  • 你好,

    根据你的描述,在做第二层绑定的时候,需要绑定的内容已经不存在于DataContext中了,这时可以“自行指定绑定源。如ElementName, Source, RelativeSource等。”而不使用DataContext。

    具体到你这里的情况,应该可以通过RelativeSource解决。差不多像这样:

    {Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=命名空间前缀:scaterview}, Path=DataContext.绑定到另外一个表的路径}
    

     


    Min Zhu [MSFT]
    MSDN Community Support | Feedback to us
    2011年12月22日 3:14
    版主