в моем приложении 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