从CustomControl WPF中定义的Datagrid访问Selecteditem

时间:2014-01-06 14:37:55

标签: wpf datagrid custom-controls

我已经定义了名为MainView的CustomControl,如下所示:

public class MainView : ContentControl
    {
        static MainView()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MainView), new FrameworkPropertyMetadata(typeof(MainView)));
        }
        public virtual void Show(MyClass obj)
        {
          this.DataContext = SomeMethodToGetListOfMyClass();
        }
    }

这是以上CustomControl的Generic.xaml代码

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:OneTouchCustomControlLib">
    <Style TargetType="{x:Type local:MainView}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:MainView}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="{TemplateBinding BorderBrush}"
                            BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid Name="Maingrid">
                            <DataGrid Name="dtMainView"
                                Margin="10,10,10,10"
                                RowHeight="20"
                                AutoGenerateColumns="True"
                                ItemsSource="{Binding}"
                                HorizontalScrollBarVisibility="Visible"
                                VerticalScrollBarVisibility="Visible"
                                Height="auto" Width="auto">
                            </DataGrid>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

在另一个项目中,我使用了这个CustomControl在stackpanel中显示数据网格,并且成功地完成了这项工作。

现在,我想要的是,点击一个按钮,我想从datagrid访问所选的项目/索引并进行进一步处理。我想我错过了什么。谁能帮忙呢?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我使用GetTemplateChild方法获得了解决方案。 另外,从Control类继承了我的CustomControl。

这是新的CustomControl定义,

public class MainView : Control
    {
        static MainView()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MainView), new FrameworkPropertyMetadata(typeof(MainView)));
        }
        public virtual void Show(MyClass obj)
        {
          this.DataContext = SomeMethodToGetListOfMyClass();
        }
        **public void GetDatagrid()
        {
           return GetTemplateChild("dtMainView") as DataGrid;
        }**
    }