2015-07-30 2 views
1

У меня есть класс, который имеет 2 общедоступных переменных строку и список пользовательского класса.Как привязать к списку внутри наблюдаемой коллекции в WPF

У меня есть настройка Binding, и она отлично работает для строки, но я не могу заставить ее привязываться к списку.

Код За

public class RegKey 
{ 
    public string Name { get; set; } 
    public List<CEKeys> Key = new List<CEKeys>(); 
} 

public class CEKeys 
{ 
    public string Path { get; set; } 
    public string KeyName { get; set; } 
    public string Value { get; set; } 
    public string Type { get; set; } 
} 

XAML

<DataGrid x:Name="dgRegKeys" Margin="0,0,0,40" ItemsSource="{Binding}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Foreground="Black" Width="60" Header="Name" Binding="{Binding Name, Mode=TwoWay}" IsReadOnly="True" /> 
     <DataGridTextColumn Foreground="Black" Width="140" Header="Value" Binding="{Binding Path=Key.Value, Mode=TwoWay}" IsReadOnly="False"/> 
     <DataGridTextColumn Foreground="Black" Width="140" Header="Type" Binding="{Binding Path=Key.Value, Mode=TwoWay}" IsReadOnly="True"/> 
    </DataGrid.Columns> 
</DataGrid> 

Как я могу связать с Перечнем CEKeys, делая ценен для редактирования? Как только значение будет подтверждено, я буду создавать перечисленные ключи.

Набрав это, я столкнулся со второй проблемой. Каждый regkey имеет список ключей. Это связано с тем, что RegKey может потребоваться установить несколько ключей для правильной работы. Как я могу отобразить все ключи в списке?

+0

Как вы добавляете значения в это имя и список? –

ответ

0

Список это поле не является свойством, и вы можете связать только со свойствами, вам нужно использовать:

public class RegKey 
{ 
    public string Name { get; set; } 
    public List<CEKeys> Key { get; set; } 

    public RegKey() 
    { 
     Key = new List<CEKeys>(); 
    } 
} 
+0

Я сделал это, но он все еще не работает. В datagrid отображается атрибут Name, но ничего из списка нет. –

+0

@ mac_attack18 запустить программу и посмотреть окно вывода визуальной студии, вы должны найти там сообщение об ошибке привязки – Nir

+0

Ошибка пути BindingExpression: свойство «Имя» не найдено в 'object' '' List'1 'BindingExpression: Path = Key. Имя; DataItem = 'RegKey; целевым элементом является «TextBlock» (Name = ''); target свойство is 'Text' (type 'String') Ошибка System.Windows.Data: 40: Ошибка пути BindingExpression: свойство 'Value' не найдено в 'object' '' List'1 ' У меня эта ошибка для обоих значений. Что он определяет как List1? –

0

Если вы хотите добавить это в список вы могли бы сделать это очень легко:

public class RegKey 
    { 
     public string Name { get; set; } 
     public List<CEKeys> Key = new List<CEKeys>(); 
     Dictionary<string, List<CEKeys>> dictionary = new Dictionary<string, List<CEKeys>>(); 
     public RegKey() 
     { 
      Key = new List<CEKeys>(); 

      dictionary.Add(Name, Key); 
     } 

    } 
Смежные вопросы