У меня есть gridview в wpf и у меня есть две радиокнопки и кнопка в столбце шаблона. как мне получить доступ к статусу переключателей? - PullRequest
1 голос
/ 19 января 2012

У меня есть сетка в wpf, две радиокнопки и кнопка в столбце шаблона. Как получить доступ к статусу переключателей в событии нажатия кнопки?

 <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 ]

2 голосов
/ 19 января 2012

Если вы не хотите использовать привязку (в случае, если ваше «Да / Нет» является просто свойством пользовательского интерфейса или по какой-либо причине, у вас все еще есть возможность. Присвойте названия RadioButtons, используя x: Name - smth. Like " YesRadioButton "и" NoRadiOButton ", а затем:

Позвоните FinName("YesRadioButton") для общего контейнера (родитель вашего RadioButtons).

или

Используйте ElementName привязку, т.е. привязывайте тег вашей кнопки к IsChecked любого из ваших 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 отправителя.

0 голосов
/ 19 января 2012

В вашем обработчике кликов отправителем является кнопка. Таким образом, вы можете найти родительскую StackPanel, затем найти в дочерних элементах RadioButtons и посмотреть, какой IsChecked является истинным.

Тем не менее, это очень хрупкий метод, основанный на точной настройке элементов пользовательского интерфейса.

Лучшим способом было бы связать IsChecked со свойствами вашей модели (или с чем бы вы ни связывались в DataGridTextColumns). Таким образом, если ваше представление изменится, обработчик Click не нужно будет настраивать.

0 голосов
/ 19 января 2012

Свяжите все, что вам нужно, с вашим элементом, затем наведите DataContext из Buttonsender) на элемент, который он есть, и проверьте, какие свойства установлены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...