2012-02-09 70 views
5

我想將listview項綁定到結構的成員,但我無法讓它工作。綁定到結構

的結構非常簡單:

public struct DeviceTypeInfo 
{ 
    public String deviceName; 
    public int deviceReferenceID; 
}; 

在我看來模式,我認爲這些結構的列表,我想要得到的「設備名稱」要顯示在列表框中。

public class DevicesListViewModel 
{ 
    public DevicesListViewModel() 
    { 

    } 

    public void setListOfAvailableDevices(List<DeviceTypeInfo> devicesList) 
    { 
     m_availableDevices = devicesList; 
    } 

    public List<DeviceTypeInfo> Devices 
    { 
     get { return m_availableDevices; } 
    } 

    private List<DeviceTypeInfo> m_availableDevices; 
} 

我試過以下,但我不能得到綁定工作,我需要使用relativesource?

<ListBox Name="DevicesListView" Grid.Column="0" VerticalAlignment="Bottom" HorizontalAlignment="Center" Margin="10" MinHeight="250" MinWidth="150" ItemsSource="{Binding Devices}" Width="Auto"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Vertical"> 
        <TextBlock Text="{Binding DeviceTypeInfo.deviceName}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

回答

9

您需要在結構屬性中創建成員。

public struct DeviceTypeInfo 
{  
    public String deviceName { get; set; }  
    public int deviceReferenceID { get; set; } 
}; 

我遇到了類似的情況昨天:P

編輯:哦,是的,像傑西說,一旦你把它們變成屬性,你要建立INotifyPropertyChanged事件。

+0

謝謝,我忘了他們必須是屬性 – 2014-07-16 08:18:40

3

我認爲你需要getter和setter。您也可能需要實施INotifyPropertyChanged

public class ViewModelBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

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

你的TextBlock的DataContextDeviceTypeInfo類型的對象,所以你只需要綁定到deviceName,不DeviceTypeInfo.deviceName

<DataTemplate> 
    <StackPanel Orientation="Vertical"> 
     <TextBlock Text="{Binding deviceName}"/> 
    </StackPanel> 
</DataTemplate> 

此外,您應該綁定到Properties,而不是字段。您可以通過將{ get; set; }添加到他們,如townsean's answer建議

+0

這是一個很好的接收。我忽略了deviceName部分。 :P – 2012-02-09 19:35:01

+0

@townsean lol我反正給了你一個+1,因爲你解決了部分問題。 – Rachel 2012-02-09 19:37:16