2010-05-18 36 views

Trả lời

14

cách tiếp cận thành công của chúng tôi cho ràng buộc một combobox được sau ...

<ComboBox 
    ItemsSource="{Binding Path=AllItems}" 
    SelectedItem={Binding Path=CurrentItem, Mode=TwoWay} /> 
<TextBlock Text="{Binding Path=CurrentItem, Mode=TwoWay}" /> 

class public ItemListViewModel 
{ 
    public ObservableCollection<Item> AllItems {get; set;} 

    private Item _currentItem; 
    public Item CurrentItem 
    { 
     get { return _currentItem; } 
     set 
     { 
      if (_currentItem == value) return; 
      _currentItem = value; 
      RaisePropertyChanged("CurrentItem"); 
     } 
    } 
} 
+1

điều này thật kỳ lạ. Tôi có thể thề tôi đã làm chính xác những gì bạn đề nghị trước vì tôi đọc về nó trên một số blog ... Bây giờ tôi đã cố gắng một lần nữa và nó làm việc: P Trong khi đó tôi đã giúp với điều này nếu ai đó quan tâm XD // Đặt lớp học mới được tạo thành chỉ mục đã chọn trong điều khiển giao diện người dùng .. SelectedSchoolclassIndex = (Schoolclasses.Count! = 0)? Schoolclasses.Count - 1: 0; – msfanboy

+1

Chỉ có vấn đề này. Tôi đã có 2 bộ sưu tập riêng biệt, và quên toán tử bằng để currentitem được chọn từ một bộ sưu tập khác so với cái tôi liên kết với XAML. Vì vậy, việc triển khai bằng cố định vấn đề. Nhưng việc chọn từ cùng một bộ sưu tập cũng đã khắc phục được sự cố –

5

Không chắc chắn lý do tại sao bạn không thể liên kết dữ liệu với SelectedItem trên ComboBox mà không thấy mã của bạn. Dưới đây cho bạn thấy làm thế nào để làm điều đó bằng cách sử dụng một CollectionView có quản lý mục hiện tại được xây dựng trong đó comboboxes hỗ trợ. CollectionView có một thuộc tính CurrentItem nhận được thuộc tính mà bạn có thể sử dụng để hiện được chọn.

XAML:

<Window x:Class="CBTest.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <StackPanel> 
     <ComboBox 
      ItemsSource="{Binding Path=Names}" 
      IsSynchronizedWithCurrentItem="True"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <TextBlock Text="{Binding}" /> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
     <TextBlock Text="{Binding Path=Names.CurrentItem}" /> 
    </StackPanel> 
</Window> 

Mã đằng sau:

using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Data; 

namespace CBTest 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      DataContext = new VM(); 
     } 
    } 

    public class VM 
    { 
     public VM() 
     { 
      _namesModel.Add("Bob"); 
      _namesModel.Add("Joe"); 
      _namesModel.Add("Sally"); 
      _namesModel.Add("Lucy"); 

      Names = new CollectionView(_namesModel); 

      // Set currently selected item to Sally. 

      Names.MoveCurrentTo("Sally"); 
     } 

     public CollectionView Names { get; private set; } 

     private List<string> _namesModel = new List<string>(); 
    } 
} 
+0

" ... Không chắc lý do tại sao bạn không thể liên kết dữ liệu với SelectedItem trên ComboBox mà không thấy mã của bạn .... " thực hiện google dễ dàng của nó một vấn đề lây lan rất rộng. CollectionView là tổng chi phí trong trường hợp của tôi hơn nữa tôi có thể và sẽ không kick ObservableCollection của tôi vì tôi cần nó để thêm/del mà CollectionView không có. – msfanboy

+0

Một CollectionView có thể là một cái nhìn của một ObservableCollection vì vậy cần phải đá bất cứ điều gì. Ý của bạn là CollectionView là tổng chi phí? Bạn đang nói về chức năng khác mà một CollectionView cung cấp bên cạnh Hiện tại, như lọc, nhóm và sắp xếp? Tôi vẫn không biết vấn đề ràng buộc là gì khi chọn selecteditem trên một combobox. –

+0

Tôi không cần một CollectionView thats nó ;-) Nếu tôi muốn sắp xếp thats công việc của kiểm soát, trong trường hợp của tôi DataGrid có chức năng này. CollectionView là okish cho một listview mà không sắp xếp cách nhấn vào tiêu đề cột. – msfanboy

Các vấn đề liên quan