Попытка добавить что-то в список, когда я нажимаю кнопку

Я работаю над определением привязки данных и источников статей с помощью WPF и С#, и мне не хватает чего-то, когда речь заходит о создании правильных связующих соединений. Результатом является ошибка времени выполнения:

Cannot find source for binding with reference 'ElementName=SettingsWindow'. BindingExpression:Path=teams; DataItem=null; target element is 'ListView' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')

Сам код довольно прост (я думаю):

SettingsWindow.xaml:

<window x:class="Bridge.SettingsWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" title="Settings">
 ...
 </window><button grid.column="0" grid.row="0" content="Add Team" click="ClickAddTeam"><code>
 <listview itemssource="{Binding}" grid.column="0" grid.row="1">
 <listview.itemcontainerstyle>
 
 </listview.itemcontainerstyle>
 </listview>
 ...


</code> <p> SettingsWindow.xaml.cs:</p> <pre class="prettyprint linenums">public partial class SettingsWindow : Window
{
 public TeamList teams { get; set; }

 public SettingsWindow()
 {
 teams = TeamManager.Instance().teamList; // persists in a different class
 this.DataContext = this.teams;
 InitializeComponent();
 }

 private void ClickAddTeam(object sender, RoutedEventArgs e)
 {
 TeamManager manager = TeamManager.Instance();
 Team toAdd = manager.GetSampleTeam(teams.Count);
 Console.WriteLine(toAdd.ToString());

 teams.Add(toAdd);

 if(teams.Count == manager.sampleTeams.Count)
 (sender as Button).IsEnabled = false;
 }
}

Team.cs:

namespace DataTypes
{
 public class Team
 {
 public string name;
 public Brush color;

 public Team(string name, Brush color)
 {
 this.name = name;
 this.color = color;
 }
 }
}

Сейчас работает:

WriteLine в ClickAddTeam печатает правильные данные, поэтому я знаю, что он правильно MyTeamList teams объект Team и что MyTeamList teams получает материал, добавленный к нему.Кнопка также отключается после соответствующего количества кликов.Однако ListBox остается пустым все время.

Следующий шаг: я пытаюсь получить строки в ListBox как team.name, а не "DataTypes.Team", а для текста - цвет команды. Как я могу захватить определенное свойство связанного элемента?

Любая помощь будет принята с благодарностью!

2 ответа

Связывание работает только с общедоступными свойствами. Попробуйте объявить teams как свойство вместо поля/члена:

public MyTeamList teams { get; set; }

//Примечание OP: эта часть ниже не будет компилироваться, давая мне member names cannot be the same as their enclosing type ошибка member names cannot be the same as their enclosing type.

и поскольку вы привязываетесь к ElementName, вам нужно называть вас Window должным образом:

[OP Note]

Простое изменение этой строки в ItemsSource="{Binding}" работает для отображения материала, но каждый элемент отображается как "DataType.Team" вместо правильной строки. Это следующее, что нужно выяснить.

[/OP Note]


Предполагается, что каждый вопрос на вопрос

Вам необходимо установить DataContext this.DataContext = this;

ItemsSource = "{Binding Path = TeamList}" DisplayMemberPath = Название

И имя должно быть публичной собственностью (получить)

licensed under cc by-sa 3.0 with attribution.