如何访问绑定到列表的对象UserNames?
到目前为止我做了什么:
在我的案例中,列表的项目是对象:
new List<UserNames>();
this.users.Add(new UserNames() {Id = 1, UserName = "name 1"});
我正在使用我有标签和按钮的数据模板。
我的清单如下:
<ListBox Grid.Column="1" Grid.Row="1" Name="listBox1" ItemsSource="{Binding}" SelectedValuePath="Id">
<ListBox.ItemTemplate>
<DataTemplate>
<WrapPanel Orientation="Vertical">
<StackPanel>
<Label Content="{Binding UserName}" />
</StackPanel>
<StackPanel Name="ButtonStackPanel">
<Button Name="MyButton" Content="Click Me" Click="MyButton_Click">
</Button>
</StackPanel>
</WrapPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我的Button方法是哪里。正如你所看到我确实尝试使用父选项,但没有成功
private void MyButton_Click(object sender, RoutedEventArgs e)
{
//StackPanel panel = (StackPanel)((Button)sender).Parent;
//WrapPanel wrapPanel = (WrapPanel) panel.Parent;
//ListItem listItem = (ListItem) wrapPanel.Parent;
//ListBox box = (ListBox) listItem.Parent;
//UserNames itemToReport = (UserNames) (box.SelectedItem);
//MessageBox.Show(itemToReport.UserName);
}
答案 0 :(得分:1)
在XAML中,将Tag属性设置为当前项。
在点击处理程序中,将其强制转换。
Usernames user =(sender as Button).Tag as Usernames;
答案 1 :(得分:1)
您可以使用按钮的DataContext
,因为它将是您的UserName
对象
private void MyButton_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
UserNames data = b.DataContext as UserNames;
MessageBox.Show(data.UserName);
}
我一直认为使用WPF,你的应用程序是DataContext
,而像Buttons,ListBoxes,TextBoxes等UI对象只是位于DataContext
之上的漂亮层。允许用户与之互动。
答案 2 :(得分:0)
要绑定数据收集,通常最容易使用ObservableCollection(如果数据正在更改运行时)。进行绑定时,必须定义datacontext,datasoure和datapath。我建议你阅读更多有关MSDN绑定的内容:D
答案 3 :(得分:0)
这对你有用 -
MessageBox.Show(((sender as Button).DataContext as UserNames).UserName);