【问题标题】:WPF databinding to a property in the same controlWPF 数据绑定到同一控件中的属性
【发布时间】:2010-11-23 17:09:00
【问题描述】:

在此示例中,我的按钮的 IsEnabled 属性绑定到网格的选定行“本地”属性,它工作得很好:

        <Button DockPanel.Dock="Bottom" Width="100" Height="100" IsEnabled="{Binding ElementName=dataGridRestore , Path=SelectedItem.Local}"></Button>

        <my:DataGrid x:Name="dataGridRestore" 
                     ItemsSource="{Binding}" 
                     >

            <my:DataGrid.ContextMenu>
                <ContextMenu Name="restoreCntextMenu">
                    <MenuItem Header="Open" />
                </ContextMenu>
            </my:DataGrid.ContextMenu>

            <my:DataGridCheckBoxColumn Header="Local" Binding="{Binding Local}"  />
        </my:DataGrid>

现在,当我将按钮从网格外部移动到网格上下文菜单内部时,我的绑定不起作用。为什么会这样,我该如何解决?

        <my:DataGrid x:Name="dataGridRestore" 
                     ItemsSource="{Binding}" 
                     >

            <my:DataGrid.ContextMenu>
                <ContextMenu Name="restoreCntextMenu">
                    <MenuItem Header="Open" />
                    <Button  Width="100" Height="100" IsEnabled="{Binding ElementName=dataGridRestore , Path=SelectedItem.Local}"></Button>
                </ContextMenu>
            </my:DataGrid.ContextMenu>

            <my:DataGridCheckBoxColumn Header="Local" Binding="{Binding Local}"  />
        </my:DataGrid>

【问题讨论】:

    标签: c# .net wpf vb.net xaml


    【解决方案1】:

    使用此代码:

    <ContextMenu DataContext="{Binding PlacementTarget.SelectedItem, RelativeSource={RelativeSource Self}}">
        <Button IsEnabled="{Binding Local}"/>
    </ContextMenu>
    

    我用 DataGridRows 的 ContextMenu 对其进行了测试,效果很好。

    【讨论】:

      【解决方案2】:

      使用RelativeSource 属性代替ElementName 怎么样?

      现在无法测试,但类似这样:

      <Button  Width="100" Height="100" IsEnabled="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DataGrid}},Path=SelectedItem.Local}"></Button>
      

      【讨论】:

        猜你喜欢
        • 2011-04-27
        • 2011-03-03
        • 1970-01-01
        • 2013-08-29
        • 2023-03-13
        • 1970-01-01
        • 2011-09-06
        • 2018-04-09
        • 2010-12-14
        相关资源
        最近更新 更多