在我的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>
用户可以更改文本框中的值,并可以使用按钮验证输入,接受它(将其写入基础模型)或删除条目。要操纵底层模型,我需要访问相关项(显示在listboxitem中,用户点击了该按钮)。
获取项目的一个想法是使用SelectedItem - Property,它将包含想要的MyClass实例。问题是,单击按钮或文本框不会选择包含ListBoxItem。用户必须首先通过单击项目的某处来手动选择Listboxitem,其中不显示任何文本框或按钮。否则,SelectedItem将为null。 我可以通过Button的父对象获取TextBoxCharacteristicName TextBox,但由于用户也可以更改此内容,我将无法使用此属性作为标识符来获取正确的项目。
任何其他想法,如何找出,哪个MyClass-instance是在相应的ListBoxItem中显示的那个?
提前致谢,
弗兰克
答案 0 :(得分:0)