[英]Selected item on ListBox binding?
我有一個ListBox綁定,但是如何將事件添加到所選項目?
MainPage.xaml中:
<!--ContentPanel - place additional content here-->
<StackPanel x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<ListBox Name="list" SelectionChanged="list_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageUri}"
Stretch="None"
Height="100"/>
<StackPanel Width="360" >
<TextBlock Text="{Binding Text}"
Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding Opis}"
Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
MainPage.xaml.cs:
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
ObservableCollection<SampleData> dataSource =
new ObservableCollection<SampleData>();
dataSource.Add(new SampleData()
{
ImageUri = "Images/appbar.delete.rest.png",
Text = "Item1",
Description = "blablabla"
});
dataSource.Add(new SampleData()
{
ImageUri = "Images/appbar.delete.rest.png",
Text = "Item2",
Description = "blablabla"
});
dataSource.Add(new SampleData()
{
ImageUri = "Images/appbar.download.rest.png",
Text = "Item3",
Description = "blablabla"
});
this.list.ItemsSource = dataSource;
}
private void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (list.SelectedItem == null) return;
//what next?
}
public class SampleData
{
public string Text { get; set; }
public string Description { get; set; }
public string ImageUri { get; set; }
}
}
例如,我想單擊Item2並轉到頁面Page2.xaml。
我來自VS2010的項目: http : //www.przeklej.pl/plik/wp7sampleproject6-7z-00368v7i196u
如果您使用的是MVVMlight之類的MVVM堆棧,這非常簡單,因為您只需在視圖模型中為Selected Item創建Full屬性,然后像其他任何操作一樣將其綁定到該屬性。 例如,使用上面的代碼,我會做:
/// <summary>
/// The <see cref="SelectedListItem" /> property's name.
/// </summary>
public const string SelectedStickPropertyName = "SelectedListItem";
private SampleData _selectedItem;
/// <summary>
/// Gets the SelectedStick property.
/// TODO Update documentation:
/// Changes to that property's value raise the PropertyChanged event.
/// This property's value is broadcasted by the Messenger's default instance when it changes.
/// </summary>
public SampleData SelectedListItem
{
get
{
return _selectedItem;
}
set
{
if (_selectedItem == value || value == null)
{
return;
}
var oldValue = _selectedItem;
_selectedItem = value;
// Update bindings, no broadcast
RaisePropertyChanged(SelectedStickPropertyName);
}
}
然后在Listbox XAML中,只需將Listbox Selected Item綁定到上述屬性(前提是您已經設置了data context屬性:
<ListBox Name="list" SelectionChanged="list_SelectionChanged" SelectedItem="{Binding SelectedListItem, Mode=TwoWay}">
這樣,您可以查詢Selected Item屬性來查找值。
我個人會使用帶有Command綁定的Button,但是我想你可以這樣開始:
public MainPage()
{
InitializeComponent();
ObservableCollection<SampleData> dataSource = new ObservableCollection<SampleData>();
dataSource.Add(
new SampleData()
{
ImageUri = "Images/appbar.delete.rest.png",
Text = "Item1",
Description = "blablabla",
TargetUri = new Uri("Page1.xaml", UriKind.Relative)
});
dataSource.Add(
new SampleData()
{
ImageUri = "Images/appbar.delete.rest.png",
Text = "item2",
Description = "blablabla",
TargetUri = new Uri("Page2.xaml", UriKind.Relative)
});
dataSource.Add(
new SampleData()
{
ImageUri = "Images/appbar.download.rest.png",
Text = "Item3",
Description = "blablabla",
TargetUri = new Uri("Page3.xaml", UriKind.Relative)
});
this.list.ItemsSource = dataSource;
}
private void list_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var data = list.SelectedItem as SampleData;
if (data == null)
{
return;
}
NavigationService.Navigate(data.TargetUri);
}
public class SampleData
{
public string Text { get; set; }
public string Description { get; set; }
public string ImageUri { get; set; }
public Uri TargetUri { get; set; }
}
*編輯
如果要點按某個項目以使用命令進行導航,則可以這樣進行:
public class SampleData
{
public string Text { get; set; }
public string Description { get; set; }
public string ImageUri { get; set; }
public Uri TargetUri { get; set; }
public ICommand NavigateCommand { get; private set; }
public SampleData()
{
NavigateCommand =
new DelegateCommand(
() => NavigationService.Navigate(TargetUri);
}
}
要獲取NavigationService實例-您可以自己實現它,也可以簡單地使用App.RootFrame執行導航調用。 您將大致如下定義命令綁定:
<ListBox.ItemTemplate>
<DataTemplate>
<Button
Command={Binding NavigateCommand}>
<Button.Template>
<ControlTemplate>
<StackPanel Orientation="Horizontal">
<Image Source="{Binding ImageUri}"
Stretch="None"
Height="100"/>
<StackPanel Width="360" >
<TextBlock Text="{Binding Text}"
Style="{StaticResource PhoneTextExtraLargeStyle}"/>
<TextBlock Text="{Binding Description}"
Style="{StaticResource PhoneTextSubtleStyle}"/>
</StackPanel>
</StackPanel>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
查看默認情況下作為新數據綁定應用程序的一部分創建的代碼。 它顯示了如何通過查詢SelectionChanged事件處理程序中的e.AddedItems
屬性來訪問SelectedItem。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.