我在wpf中有一个gridview,并有一个两个单选按钮和一个模板列中的按钮。我如何访问单选按钮的状态?

时间:2012-01-19 10:05:21

标签: c# wpf vb.net xaml datagrid

我在wpf中有一个gridview,并且在模板列中有一个两个单选按钮和一个按钮。如何在按钮的单击事件中访问单选按钮的状态?

 <DataGrid>
     <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding TrackingID}" Header="TrackingID" Visibility="Hidden" Width="50" />
        <DataGridTextColumn Binding="{Binding UserFullName}" Header="Name" Width="140" />                                       
        <DataGridTemplateColumn Width="350">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                        <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
                            <RadioButton Width="50" Content="Yes" GroupName="status" />
                            <RadioButton Width="50" Content="No" GroupName="status" IsChecked="True" />
                            <Button Width="100" Click="Button_Click">View Details</Button>
                        </StackPanel>
                    </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
     </DataGrid.Columns>
 </DataGrid>

我在Button_Click()函数中捕获按钮的事件。在此功能中,我想知道选择了哪个单选按钮。

private void Button_Click(object sender, RoutedEventArgs e)
        {                
                int trackingid = Convert.ToInt32((((FrameworkElement)sender).DataContext as DataRowView)[0].ToString()); //get the tracking id of the request

                //(((FrameworkElement)sender).DataContext as RadioButton) //not working

        }

请帮助。

3 个答案:

答案 0 :(得分:2)

如果您不想使用绑定(如果您的Yes / No纯粹是UI属性或出于任何原因,您仍然有一个选项。使用x:Name - smth。像“给你的RadioButtons名称” YesRadioButton“和”NoRadiOButton“然后:

为共享容器(FinName("YesRadioButton")的父级)调用RadioButtons

使用ElementName绑定,即将您的按钮标记绑定到任意RadiButtons

的IsChecked
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" Orientation="Horizontal">
 <RadioButton x:Name="YesRadioButton" Width="50" Content="Yes" GroupName="status" />
 <RadioButton x:Name="NoRadioButton" Width="50" Content="No" GroupName="status" IsChecked="True" />
 <Button Width="100" Click="Button_Click" Tag="{Binding ElementName='YesRadioButton', Path='IsChecked'}">View Details</Button>   
</StackPanel>

然后在按钮上单击,只需检查发件人的Tag属性。

答案 1 :(得分:0)

Bind您对商品所需的一切,然后将DataContext Buttonsender)中的{{1}}投射到该项目,并检查设置了哪些属性

答案 2 :(得分:0)

在您的点击处理程序中,发件人是按钮。因此,您可以查找父StackPanel,然后在子节点中搜索RadioButtons,并查看哪个IsChecked为真。

但是,根据UI项目的确切设置,这非常脆弱。

更好的方法是将IsChecked绑定到模型上的属性(或者在DataGridTextColumns中绑定的任何属性)。这样,如果您的视图发生更改,则无需调整Click-handler。