zoukankan      html  css  js  c++  java
  • RelativeSource实例

    Binding中使用RelativeSource

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

    其对应的VM是local:ViewMode,含有ModelValuemyLIst属性分别用来做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
    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>
    View Code
  • 相关阅读:
    中值定理
    poj 3984 迷宫问题 bfs
    android 处理网络状态——无网,2g,3g,wifi,ethernet,other
    POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)
    Android硬件加速
    Android的横竖屏切换
    滑雪_poj_1088(记忆化搜索).java
    Rank of Tetris(hdu1811拓扑排序+并查集)
    git在windows下clone、pull或者push内存溢出的解决办法
    数据库中DDL、DML、DCL和TCP概念
  • 原文地址:https://www.cnblogs.com/shawnzxx/p/3100147.html
Copyright © 2011-2022 走看看