Điều khiển ListBox không thực hiện một thuộc tính Command. Tôi phải đính kèm một số chức năng cho sự kiện SelectionChanged. Ai đó biết làm thế nào tôi có thể làm điều đó? Xin hãy giúp tôiLàm thế nào tôi có thể nhận ra SelectionChanged trong MVVM ListBox Silverlight
Trả lời
Tôi thích sử dụng liên kết với SelectedItem
và triển khai bất kỳ chức năng nào trong cài đặt thuộc tính ràng buộc.
<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" />
...
public class ViewModel
{
public IEnumerable<Item> Items { get; set; }
private Item selectedItem;
public Item SelectedItem
{
get { return selectedItem; }
set
{
if (selectedItem == value)
return;
selectedItem = value;
// Do logic on selection change.
}
}
}
nghĩ bài này từ Laurent Bugnion sẽ giúp bạn giải quyết vấn đề:
Các bài viết ở trên đề cập đến DataGrid nhưng tôi nghĩ rằng nó sẽ làm việc với ListBox quá!
Trân trọng và chúc mừng năm mới !! :)
Tôi khuyên bạn nên sử dụng RelayCommand
. Sử dụng MVVM Light Toolkit hoặc chỉ sử dụng các lớp RelayCommand
và CommandManager
từ Josh Smith's implementations. Cá nhân tôi chỉ sử dụng hai lớp, vì vậy tôi không cần toàn bộ bộ công cụ.
Trong khi điều này chắc chắn sẽ hoạt động, có thể có một cách dễ dàng hơn tùy thuộc vào những gì bạn đang làm. Có thể dễ dàng ràng buộc một đối tượng với số SelectedValue
của số ListBox
và lắng nghe giá trị đó thay đổi.
Cảm ơn tất cả các bạn đã trợ giúp) Chúc mừng năm mới !!! –
Về cơ bản bạn có một vài lựa chọn:
- Sử dụng SelectedItem tài sản của ListBox để ràng buộc vào một tài sản trong backend (tức là theo quan điểm của mô hình) và thực hiện logic trong setter như được mô tả bởi Cameron MacFarland.
- Sử dụng thư viện của bên thứ ba có sự kiện chung để chỉ huy hành vi như trong liên kết được đăng bởi Pedro Lamas.
- Nếu bạn không muốn sử dụng thư viện của bên thứ ba hoặc viết logic bên trong thiết lập thuộc tính thì bạn không thể chấp nhận hành vi của riêng bạn để kiểm soát ListBox. Nó sẽ đăng ký sự kiện
SelectionChanged
của điều khiển và thực thi lệnh (lệnh có thể là thuộc tính phụ thuộc được hiển thị bởi hành vi).
Đây là cách mà bạn có thể đến lựa chọn thay đổi các sự kiện trong MVVM ứng dụng của bạn Trước hết tôi nói với bạn rằng chỉ huy tài sản chỉ làm việc tại nút bây giờ chúng tôi phải Rõ ràng ràng buộc tài sản đó trong trường hợp đã thay đổi lựa chọn của chúng tôi như Danh sách hộp hoặc combo box trong XMAL bạn nộp
<ListBox Name="MyListBox" ItemsSource="{Binding ListItems}" Height="150" Width="150" Margin="281,32,-31,118">
<Local:Interaction.Triggers>
<Local:EventTrigger EventName="SelectionChanged">
<Local:InvokeCommandAction Command="{Binding MyCommand}" CommandParameter="{Binding ElementName=MyListBox,Path=SelectedItem}"/>
</Local:EventTrigger>
</Local:Interaction.Triggers>
</ListBox>
cho điều này bạn phải thêm Syatem.Windows dll.Tương tác bây giờ u có thêm tài liệu tham khảo trong file namespace XAML của bạn như
xmlns:Local="clr-namespace:System.Windows.Interactivityassembly=System.Windows.Interactivity"
trong ViewModel lớp của bạn, bạn phải xác định lệnh của bạn trong cấu trúc Côn
public ViewModel123()
{
MyCommand = new RelayCommand<string>(TestMethod);
}
tại tạo ra các phương pháp TestMethod mà có thể xử lý lựa chọn đã thay đổi sự kiện
private void TestMethod(string parameter)
{
MessageBox.Show(parameter);
}
tôi hy vọng điều này có thể giúp bạn.
Tôi thích cách này vì tôi nghĩ nó sạch hơn. –
Mẹo tuyệt vời, cảm ơn bạn – James
Nó có hoạt động với nhiều lựa chọn không? – Simsons
@Simsons Chỉ khi bạn có cách để liên kết với nhiều lựa chọn. Tôi tin rằng thuộc tính SelectedItem bị bỏ qua trong quá trình chọn nhiều lần. –