我在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
}
请帮助。
答案 0 :(得分:2)
如果您不想使用绑定(如果您的Yes / No纯粹是UI属性或出于任何原因,您仍然有一个选项。使用x:Name - smth。像“给你的RadioButtons名称” YesRadioButton“和”NoRadiOButton“然后:
为共享容器(FinName("YesRadioButton")
的父级)调用RadioButtons
。
或
使用ElementName
绑定,即将您的按钮标记绑定到任意RadiButtons
<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
Button
(sender
)中的{{1}}投射到该项目,并检查设置了哪些属性
答案 2 :(得分:0)
在您的点击处理程序中,发件人是按钮。因此,您可以查找父StackPanel,然后在子节点中搜索RadioButtons,并查看哪个IsChecked为真。
但是,根据UI项目的确切设置,这非常脆弱。
更好的方法是将IsChecked绑定到模型上的属性(或者在DataGridTextColumns中绑定的任何属性)。这样,如果您的视图发生更改,则无需调整Click-handler。