• 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
  • 相关阅读:
    hdoj:2033
    hdoj:2032
    hdoj:2031
    hdoj:2029
    hdoj:2028
    hdoj:2027
    hdoj:2024
    hdoj:2023
    hdoj:2022
    hdoj:题目分类
  • 原文地址:https://www.cnblogs.com/shawnzxx/p/3100147.html
Copyright © 2020-2023  润新知