Как я могу получить доступ к радиокнопке внутри ListBoxItem в Windows Phone 7 - PullRequest
0 голосов
/ 11 февраля 2011

Пожалуйста, просмотрите код для ListBox, который я использую

<ListBox Name="listBoxDefaultAcc" HorizontalAlignment="Left" VerticalAlignment="Top" Width="450" Height="410">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Height="60" Width="450">
                            <RadioButton Content="{Binding}" GroupName="defaultAcc" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Width="450" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

Теперь я хочу получить доступ к свойству content RadioButton из codebehind.

ListBoxItems динамически заполняется из-за следующего кода:

listBoxDefaultAcc.ItemsSource = from acc in db.Table<Accounts>()
                                        select acc.accName;

Пожалуйста, помогите мне с этим.

Ответы [ 2 ]

1 голос
/ 11 февраля 2011

Вы должны использовать DataBinding.Вы должны привязать Контент к свойству, которое представляет контент, объекта, который вы устанавливаете как элемент.

Таким образом, вам не нужно заботиться о списках, шаблонах или чем-либо еще.Вы просто управляете объектами, и эти изменения отражаются в графическом интерфейсе.

1 голос
/ 11 февраля 2011

Вы можете использовать VisualTreeHelper и перейти к элементу управления.Это, однако, не рекомендуется.
Лучше всего связывать только свойства элементов управления в вашей таблице данных, а затем извлекать значения, получая связанные значения.Технически, в этом случае, если вы захотите изменить содержимое радиокнопки, вам нужно будет изменить элемент в источнике элементов

Можете ли вы объяснить, что вы пытаетесь архивировать, получив содержимое радиокнопки?

Редактировать **********

  <ListBox Name="listBoxDefaultAcc" HorizontalAlignment="Left" VerticalAlignment="Top" Width="450" Height="410">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Horizontal" Height="60" Width="450">
                            <RadioButton Content="{Binding Name}" IsChecked="{Binding Selected, Mode=TwoWay}" GroupName="defaultAcc" HorizontalAlignment="Left" VerticalAlignment="Center" Height="80" Width="450" />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>

public partial class Home : Page
{
    public Home()
    {
        InitializeComponent();
        var items = new List<SomeClass>();
        items.Add(new SomeClass() {Name = "a"});
        items.Add(new SomeClass() {Name = "b"});
        items.Add(new SomeClass() {Name = "c"});

        listBoxDefaultAcc.ItemsSource = items;
    }

    // Executes when the user navigates to this page.
    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
    }

    private void testButton_Click(object sender, RoutedEventArgs e)
    {
        var items = (List<SomeClass>)listBoxDefaultAcc.ItemsSource;
        var selectedItem = items.Where(x => x.Selected).FirstOrDefault();
    }

    class SomeClass
    {
        public string Name { get; set; }
        public bool Selected { get; set; }
    }
}
...