zoukankan      html  css  js  c++  java
  • Binding中使用RelativeSource

    问题:当前View有一个DataGrid,其DataGridTemplateColum设置了一个ComboBox。

    其对应的VM是local:ViewMode,含有ModelValue和myLIst属性分别用来做DataGrid的ItemSource,和ComboBox的ItemSource。外层内层看起来链接的VM层不同的property。

    初始代码如下:

    复制代码
    <DataGrid ItemsSource="{Binding ModelValues, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
           <DataGridTemplateColumn Header="myHeader" Width="200">
                <DataGridTemplateColumn.CellTemplate>
                     <DataTemplate>
                          <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False"
                               SelectedValue="{Binding myID, Mode=TwoWay}"
                               ItemsSource="{Binding Path=myList, 
                               RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ViewModel}}}" />
                     </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
                <DataGridTemplateColumn.CellEditingTemplate>
                     <DataTemplate>
                          <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False"
                               SelectedValue="{Binding myID, Mode=TwoWay}"
                               ItemsSource="{Binding Path=myList, 
                               RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ViewModel}}}" />
                     </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
           </DataGridTemplateColumn>
      </DataGrid>
    
    View Code
    复制代码

    错误在于RelativeSource沿着Visual Tree找不到一个叫local:ViewModel的图形对象

    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ViewModel}}

    解决代码:The Relativesource is for the Visual Tree, not the DataContext

    复制代码
    <DataGrid ItemsSource="{Binding ModelValues, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
      <DataGridTemplateColumn Header="myHeader" Width="200">
         <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False"
                          SelectedValue="{Binding myID, Mode=TwoWay}"
                          ItemsSource="{Binding Path=DataContext.myList, 
                          RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
        <DataGridTemplateColumn.CellEditingTemplate>
            <DataTemplate>
                <ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False"
                          SelectedValue="{Binding myID, Mode=TwoWay}"
                          ItemsSource="{Binding Path=DataContext.myList, 
                          RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}" />
            </DataTemplate>
        </DataGridTemplateColumn.CellEditingTemplate>
      </DataGridTemplateColumn>
    </DataGrid>
  • 相关阅读:
    ARC下的内存泄露
    iPhone 被同步到 Mac上后 如果不希望更新到Mac上在哪里删除?
    图像处理之基础---2个YUV视频 拼接技术
    多媒体开发之---H264 RTSP交互过程
    6410开发之---uboot
    数学和算法之---重温傅立叶
    多媒体开发之---h264 rtp打包
    多线程开发之---线程等待
    多媒体开发之---开源库ffmeg的log之子解析
    直升机的革命---鱼鹰运输机
  • 原文地址:https://www.cnblogs.com/sjqq/p/8110358.html
Copyright © 2011-2022 走看看