Я пытаюсь заполнить представление списка, содержащееся в пользовательском элементе управления, но столкнулся с препятствием и не знаю, как продолжить.
<UserControl x:Class = "AC_Career_Mode.controls.HistoryTab"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:local = "clr-namespace:AC_Career_Mode.controls"
mc:Ignorable = "d"
x:Name = "RecordsUC"
d:DesignHeight = "450" d:DesignWidth = "800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height = "30"/>
<RowDefinition/>
</Grid.RowDefinitions>
<ListView x:Name = "RecordsCtrl_lv" SelectionMode = "Single" Grid.Row = "1" >
<ListView.View>
<GridView>
<GridViewColumn Width = "100" DisplayMemberBinding = "{Binding Date, StringFormat=dd-MM-yyyy}">
<GridViewColumnHeader Content = "Date" />
</GridViewColumn>
<GridViewColumn Width = "600" DisplayMemberBinding = "{Binding Description}">
<GridViewColumnHeader Content = "Description"/>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Label Content = "{Binding Title}" HorizontalAlignment = "Left" Width = "403" />
</Grid>
</UserControl>
Мой код позади
public partial class HistoryTab : UserControl
{
public ObservableCollection<Record> Records
{
get { return (ObservableCollection<Record>)GetValue(RecordsProperty); }
set { SetValue(RecordsProperty, value); }
}
public static readonly DependencyProperty RecordsProperty = DependencyProperty.Register("Records", typeof(ObservableCollection<Record>),
typeof(HistoryTab),
new PropertyMetadata(null));
public string Title { get; set; }
public HistoryTab()
{
InitializeComponent();
DataContext = this;
}
}
Затем я вызываю uc вот так
<uControl:HistoryTab x:Name = "test_records" />
и пытаюсь установить свойство записи следующим образом
test_records.Records = new ObservableCollection<Record>(Record.DeserializeRecords(profile));
Теперь я не знаю, что еще мне нужно сделать, я гуглил и консультировался со многими источниками, но либо это выше моего понимания, давая мало подробностей о том, что делать, либо слишком просто.
Некоторые ссылки, которые я посетил
Передача общих списков в пользовательский контроль WPF (я не знаю, что ответ хочет, чтобы я сделал)
Этот учебник на YouTube (Хорошо, но я думаю, что это отклоняется от того, что я хочу сделать)
Что ж, спасибо, да, это исправляет ошибку сборки, но я все еще не могу заполнить свой список, я отредактирую вопрос, чтобы он был понятнее.
туториал на ютубе наглядно показывает что еще делать
Извините, но я этого не вижу. Список определяется в окне xaml, а затем он выбирает для отображения одно из свойств в пользовательском элементе управления. Не знаю, как перевести это на то, что я хочу сделать.





Как всегда, когда вы хотите передать данные элементу управления, используйте привязку данных. Я рекомендую прочитать Обзор привязки данных (WPF .NET), чтобы получить представление о привязке данных.
Вы также никогда не должны устанавливать DataContext пользовательского элемента управления или UserControl на себя. Это исключает возможность установки привязки к свойствам элемента управления. Не устанавливайте DataContext вообще. Он будет унаследован или явно установлен в контексте, в котором используется элемент управления. Это позволяет использовать следующее:
<!-- The HistoryTab.DataContext is implicitly inherited -->
<HistoryTab x:Name = "test_records"
Records = "{Binding RecordItems}" />
DataContext = this; допустимо только в корневом элементе WPF, таком как, например, Window, Page и Popup. Поскольку по определению у этих элементов не может быть родителя (в визуальном дереве), не будет контекста, связанного с родительскими данными.
Сначала исправьте элементы управления DataContext:
HistoryTab.xaml.cs
partial class HistoryTab : UserControl
{
public HistoryTab()
{
InitializeComponent();
}
}
Затем привяжите внутреннее ListView к родительскому Record свойству:
<UserControl>
<ListView x:Name = "RecordsCtrl_lv"
ItemsSource = "{Binding RelativeSource = {RelativeSource AncestorType=UserControl}, Path=Records}" />
</UserControl>
Спасибо за подробный ответ, это сделало это, и теперь я немного лучше понимаю UC. Я обязательно прочитаю о привязке данных.
используйте
new PropertyMetadata(null)вместоnew PropertyMetadata("").""— это строка, а DP определяется типомObservableCollection<Record>. поэтому несоответствие типов