【问题标题】:Get DataContext from TextBlock MouseDown从 TextBlock MouseDown 获取 DataContext
【发布时间】:2013-06-23 21:09:56
【问题描述】:

ListView GridView 中的绑定列

如何在 MouseDown 事件中获取 DataSource

<GridViewColumn.CellTemplate>
    <DataTemplate>  
         <TextBlock Text="{Binding Path=Name, Mode=OneWay}" 
                    MouseDown="NameCol_mousedown"/>
    </DataTemplate>
</GridViewColumn.CellTemplate>

这适用于另一个项目,在 ListView 中有一个按钮。

这是它尝试过的......

错误无法将“MS.Internal.NamedObject”类型的对象转换为“ListViewDragDrop.DocProp”类型。

DataSource 是 DocProp。

private void NameCol_mousedown(object sender, MouseButtonEventArgs e)
{
    TextBlock tb = (TextBlock)sender;
    object data = tb.DataContext;
    dataSource = (DocProp)tb.DataContext;
}

【问题讨论】:

    标签: c# .net wpf listview mouseevent


    【解决方案1】:

    试试这个...

    private void NameCol_mousedown(object sender, MouseButtonEventArgs e)
    {
        var tb = (TextBlock)e.OriginalSource;
        var dataCxtx = tb.DataContext;
        var dataSource = (DocProp)dataCxtx;
    }
    

    【讨论】:

    • 那行得通。请告诉我为什么 TextBlock 需要 OriginalSource 而 Button 不需要?
    • 我可以解释,但 MSDN 解释得更好......请参阅他们对路由事件参数的帮助。
    【解决方案2】:

    对于仍有问题的任何人,这也可以正常工作。

    private void MenuItem_Click(object sender, RoutedEventArgs e)
    {
        var baseobj = sender as FrameworkElement;
        var myObject = baseobj.DataContext as (Object you expect);
    
        // Example: var myObject = baseobj.DataContext as Dog;
        // myObject.Bark();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2010-10-30
      • 2015-04-04
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多