【发布时间】:2014-04-25 09:00:55
【问题描述】:
我在 ListBox 中有项目列表。
所有项目都有按钮。
我想在单击 ListBox 内的按钮时显示所选项目的名称(不是列表框项目)。
我的 Xaml:-
<ListBox SelectedIndex="{Binding SelectedIndex,Mode=TwoWay}"
SelectedItem="{Binding SelectedStudent, Mode=TwoWay}" Height="374"
ItemsSource="{Binding StudentDetails,Mode=TwoWay}"
HorizontalAlignment="Left" Margin="2,6,0,0" Name="listBox1"
VerticalAlignment="Top" Width="476" BorderBrush="#00410D0D">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<i:InvokeCommandAction Command="{Binding EventPageCommand, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Gray" Padding="5" BorderThickness="1">
<StackPanel Orientation="Horizontal">
<Border BorderBrush="Wheat" BorderThickness="1">
<Image Name="ListPersonImage" Source="{Binding PersonImage}"
Height="100" Width="100" Stretch="Uniform" Margin="10,0,0,0"/>
</Border>
<TextBlock Text="{Binding FirstName}" Name="firstName" Width="200"
Foreground="White" Margin="10,10,0,0"
FontWeight="SemiBold" FontSize="22" />
<Button Height="80" Width="80" Command="{Binding addPerson}"
DataContext="{Binding DataContext, ElementName=listBox1}">
<Button.Background>
<ImageBrush
ImageSource="/NewExample;component/Images/icon_increase.png" />
</Button.Background>
</Button>
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
在这里,当我单击“addPerson”按钮时,它应该会显示所选项目的名称。
现在我已经编写了列表框“SelectedItmes”的编码。
我的视图模型:-
private MVVMListBoxModel selectedStudent;
public MVVMListBoxModel SelectedStudent
{
get { return selectedStudent; }
set
{
if (selectedStudent == value)
return;
selectedStudent = value;
MessageBox.Show("Selected Item==>" + selectedStudent.FirstName + " Selected Index==>" + SelectedIndex);
if (SelectedIndex == 0)
{
var rootFrame = (App.Current as App).RootFrame;
rootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
}
}
在这里,当我单击列表框项目时,我可以显示选定的名称。
但现在我想在单击按钮时显示。
单击按钮时是否可以显示项目?
现在我已经尝试过这样的:-
public ReactiveAsyncCommand addPerson { get; set; }
public MVVMListBoxViewModel()
{
addPerson = new ReactiveAsyncCommand();
addPerson.Subscribe(x =>
{
MessageBox.Show("Button Clicked..!!");
ListBox listbox = (ListBox)sender;
ListBoxEventsModel items = (ListBoxEventsModel)listbox.SelectedItem;
MessageBox.Show("Selected Name" + items.ToString());
});
}
但在这里我无法显示所选项目。
请告诉我解决此问题的任何想法。
【问题讨论】:
-
请贴出
addPerson的声明是字段还是属性? -
嗨@Verdsrobert。我在原始问题中添加了
addPerson声明。 -
我知道我要说的不是太多 MVVM,只是为了测试您的命令是否已绑定,您可以订阅 Button 上的 Loaded 事件并检查它的命令属性是否已设置,并且它的值等于你的 addPerson ReactiveAsyncCommand。
-
嗨@verdesrobert..你能给我举个例子吗?
标签: c# windows-phone-7 listbox