2015-01-02 187 views
0

我想使用的ObservableCollection從對象數據綁定到XAML視圖: 我有具有屬性的類:C#WPF的ObservableCollection綁定到XAML

public ObservableCollection<Roll> RollList = new ObservableCollection<Roll>(); 

而且一些方法修改該集合(基本方法這增加了新的條目),像這樣:

RollList.Add(roll); //roll is and Roll class object bellow 

下面是我在收集使用捲筒紙類:

class Roll : INotifyPropertyChanged 
{ 
    private List<int> _hitList; 

    public List<int> HitList 
    { 
     get { return _hitList; } 
     set { _hitList = value; OnPropertyChanged("HitList"); } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string name) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(name)); 
     } 
    } 
} 

public class ListToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     List<int> list = value as List<int>; 
     return String.Join("", list.ToArray()); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string list = value as string; 
     return list.Split(' ').Select(n => int.Parse(n)).ToList(); 
    } 
} 

現在在我的主窗口類中實例化我的類,它構造上面的ObservableCollection對象並用數據填充它;

我像我這樣將我的集合綁定到DataContex;

DataContext = MyCoolClass; //MyCoolClass has ObservableCollection<Roll> RollList inside of it 

而且過去的事我什麼我做的:

<Window.Resources> 
    <local:ListToStringConverter x:Key="ListToStringConverter" /> 
</Window.Resources> 

<ListBox 
    Height="Auto" 
    Width="Auto" 
    Name="RollList" 
    ItemsSource="{Binding RollList, Converter={StaticResource ListToStringConverter}}" 
/> 

在列表框中沒有得到填充數據。我知道RollList對象充滿了數據,因爲我是在監視窗口,如果我指定列表框項目源manualy:

RollList.ItemsSource = ConvertedCollection; 

它的工作原理和列表框用數據填充我wan't,但我想要將其綁定到xaml中;

PS。我是C#和WPF的新手。

+0

你的轉換器是廢話,它使用列表它應該使用列表項目。我複製了你的情況。第一:不要使用Converter,因爲它會返回一個新的集合,而不是您的可觀察對象。第二@Chris_Eelmaa是對的,使用財產而不是公共領域! – Samuel

回答

0

您需要實現一個屬性。

public MyCoolClass 
{ 
    private ObservableCollection<Roll> _rollList; 

    public ObservableCollection<Roll> RollList 
    { 
     get { return _rollList; } 
     set 
     { 
      if (_rollList != value) 
      { 
       _rollList = value; 
       OnPropertyChanged("RollList"); 
      } 
     } 
    } 
} 
7
public ObservableCollection<Roll> RollList = new ObservableCollection<Roll>(); 

這不是屬性。這是一個領域。 WPF使用屬性。

+0

我看到我還不完全理解這個概念,據我所知,屬性應該得到,設置方法? –

+0

@sepikas_antanas:是的。 –