Получение ListItem списка с привязкой к данным в Silverlight - PullRequest
0 голосов
/ 08 июля 2010

в моем приложении Silverlight 4 у меня есть наблюдаемый список определенного пользователем класса

ObservableCollection<MyClass> myList;

public class MyClass
{
  public string Name { get; set; }
  public string Value { get; set; }
}

Я отображаю этот список в ListBox, используя привязку данных и Шаблон для ListBoxItems:

<ListBox x:Name="ListBoxCharacteristics" Background="{x:Null}" HorizontalAlignment="Left" >
  <!-- DataTemplate to display the content -->
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel x:Name="StackPanelBorder" Orientation="Horizontal" HorizontalAlignment="Left">
        <TextBox x:Name="TextBoxCharacteristicName" Style="{StaticResource InputTextBox}" Text="{Binding Name}" />
        <TextBox x:Name="TextBoxSep" Style="{StaticResource ReadOnlyTextBox}" Text="=" />
        <TextBox x:Name="TextBoxValue" Style="{StaticResource InputTextBox}" Text="{Binding Value}" LostFocus="FormulaTextBox_LostFocus" TextChanged="Formula_TextChanged"/>

        <Button x:Name="ButtonCheck" Style="{StaticResource RoundWebdingButton}" Content="s" Click="ButtonCheck_Click" />
        <Button x:Name="ButtonAccept" Style="{StaticResource RoundWebdingButton}" Content="a" Click="ButtonAccept_Click" />
        <Button x:Name="ButtonRemove" Style="{StaticResource RoundWebdingButton}" Content="r" Click="ButtonRemove_Click" />
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>

  <ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
      <Setter Property="HorizontalAlignment" Value="Left" />
    </Style>
  </ListBox.ItemContainerStyle>
</ListBox>

Пользователь может изменить значения в текстовых полях и может использовать кнопки, чтобы проверить ввод, принять его (записать его в базовую модель) или удалить запись. Чтобы манипулировать базовой моделью, мне нужно получить доступ к связанному элементу (который отображается в элементе списка, где пользователь нажал кнопку).

Одной из идей получить элемент было использование свойства SelectedItem -, которое будет содержать требуемый экземпляр MyClass. Проблема в том, что нажатие на кнопку или текстовое поле не выбирает содержащий ListBoxItem. Пользователь должен будет сначала вручную выбрать элемент списка, щелкнув где-нибудь в элементе, где текстовое поле или кнопка не отображаются. В противном случае SelectedItem будет нулевым. Я мог бы получить TextBoxCharacteristicName TextBox через родительский объект Button, но так как пользователь также сможет изменять это содержимое, я не смогу получить правильный элемент, используя это свойство в качестве идентификатора.

Любая другая идея, как узнать, какой экземпляр MyClass является тем, который отображается в соответствующем ListBoxItem?

Заранее спасибо,
Frank

1 Ответ

0 голосов
/ 08 июля 2010

Нашли это!Кнопка имеет свойство DataContext, которое содержит объект MyClass, который я искал!

...