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
  • 相关阅读:
    textspan 转连接
    showDialog 必须Stateful
    SliverList , SliverFixedExtentList
    sliver
    [UWP]UIElement.Clip虽然残废,但它还可以这样玩
    [UWP]用Win2D和CompositionAPI实现文字的发光效果,并制作动画
    [UWP]用Win2D实现镂空文字
    [UWP]通过自定义XamlCompositionBrushBase实现图片平铺
    [UWP]使用Win2D的BorderEffect实现图片的平铺功能
    [UWP]使用CompositionAPI的翻转动画
  • 原文地址:https://www.cnblogs.com/shawnzxx/p/3100147.html
Copyright © 2011-2022 走看看