在Silverlight中获取数据绑定列表的ListItem

时间:2010-07-08 14:09:24

标签: silverlight data-binding listbox

在我的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中显示的那个?

提前致谢,
弗兰克

1 个答案:

答案 0 :(得分:0)

发现它! Button有一个属性“DataContext”,它包含我正在寻找的MyClass对象!