Я все еще пытаюсь раздобыть привязку данных в WPF, и поэтому у меня возникла проблема с тем, как решить эту проблему за последние 10 часов:C# WPF DataBinding «Не удается найти свойство»
У меня есть объект с именем birdList, который состоит из списка объектов Bird (bird1 и bird2). Я сделал все свойства внутри объектов общедоступными. Когда я пытаюсь передать данные, связываю свойство Common_Name с TextBlock, я ничего не получаю. Глядя на выходе в Visual Studio, я вижу следующие ошибки/предупреждения:
System.Windows.Data Warning: 60 : BindingExpression (hash=47755470): Default mode resolved to OneWay
System.Windows.Data Warning: 78 : BindingExpression (hash=47755470): Activate with root item 'birdList'
System.Windows.Data Warning: 108 : BindingExpression (hash=47755470): At level 0 - for String.Bird found accessor <null>
System.Windows.Data Warning: 108 : BindingExpression (hash=47755470): At level 0 - for EnumerableCollectionView.Bird found accessor <null>
System.Windows.Data Warning: 108 : BindingExpression (hash=47755470): At level 0 - for Char.Bird found accessor <null>
System.Windows.Data Error: 40 : BindingExpression path error: 'Bird' property not found on 'object' ''String' (HashCode=-874795121)'.
System.Windows.Data Warning: 103 : BindingExpression (hash=47755470): Replace item at level 1 with {NullDataItem}
System.Windows.Data Warning: 88 : BindingExpression (hash=47755470): TransferValue - using fallback/default value ''
System.Windows.Data Warning: 89 : BindingExpression (hash=47755470): TransferValue - using final value ''
C# Код:
public Birds birdList { get; set; }
Bird bird1 { get; set; }
Bird bird2 { get; set; }
public MainWindow()
{
InitializeComponent();
birdList = new Birds();
bird1 = new Bird();
bird2 = new Bird();
bird1.Common_Name = "Mallard";
bird2.Common_Name = "Red-winged Blackbird";
birdList.Bird.Add(bird1);
birdList.Bird.Add(bird2);
birdList.Test = "Testing!";
this.DataContext = this;
this.Photos = (PhotoCollection)(Application.Current.FindResource("Photos") as ObjectDataProvider).Data;
this.Photos.Path = "E:\\Network Drive\\SarDonnie's Documents - Networked\\Birds\\Ducks, Geese, and Swans (Anatidae)\\Mallard\\Clear Lake Bay Park 1-18-16";
}
public class Birds
{
public string Test { get; set; }
public List<Bird> _Birds = new List<Bird>();
public List<Bird> Bird
{
get
{
return this._Birds;
}
}
}
public class Bird
{
public string Common_Name { get; set; }
}
XMAL:
<Grid Grid.Column="2">
<ContentControl Content="birdList">
<ContentControl.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Height="50" Text="{Binding Bird.Common_Name,diag:PresentationTraceSources.TraceLevel=High}">
</TextBlock>
</StackPanel>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
</Grid>
Я также попытался это проверить, обращающийся к Испытательное свойство внутри birdList Объект:
<Grid Grid.Column="2">
<ContentControl Content="birdList">
<ContentControl.ContentTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Height="50" Text="{Binding Test>
</TextBlock>
</StackPanel>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
</Grid>
Мой вопрос: почему я не могу найти свойство birdList.Bird.Common_Name или свойство birdList.Test?
Спасибо!
Также не стесняйтесь указать мне некоторые хорошие сайты, на которых размещена информация о WPF. Я ненавижу ударить головой по этой клавиатуре и не получить нигде!
Большое спасибо за ответ! – user3732456
Большое спасибо за ответ! Реализация вашего кода работает, однако, я действительно озадачен тем, как одна форма моего кода не работает. Как я уже сказал, я работал над ним в течение 10 часов. Итак, в какой-то момент я использовал DataGrid с ItemSource = "{Bindng birdList._Birds}". birdList._Birds - список птиц, но он не будет отображаться! Это будет эквивалентно вашему коду, но по какой-то причине это не так. Единственное, о чем я могу думать, это мой синтаксис. Как я могу получить доступ к списку birdList._Birds? – user3732456
Вы связали свойство, которое хотите отобразить в DataGrid? – Doncot