Разметка WPF не видит тип в другом пространстве имен - PullRequest
0 голосов
/ 11 мая 2011

Я уверен, что это очень нубский вопрос для тех, кто имеет опыт привязки данных WPF, но я нуб. Так что заранее извиняюсь:

Я пытаюсь связать коллекцию объектов (IEnumerable) со списком, как показано ниже. Проблема в том, что когда мой тип LogEntry находится в том же пространстве имен (ActivityLog), что и мой «codebehind», я могу видеть свойства объекта, отображаемые в списке. Тем не мение; когда тип LogEntry находится в другом пространстве имен (ActivityLog.Classes), в списке ничего не отображается.

Я попытался добавить пространство имен ActivityLog.Classes в разметку xaml (xmlns: local = "clr-namespace: ActivityLog.Classes"), но я уверен, что пропущен какой-то дополнительный шаг.

Пожалуйста, помогите.

namespace ActivityLog
{
    public partial class LogPage : Window
    {
        public LogPage()
        {
            InitializeComponent();
            List<LogEntry> leList = new List<LogEntry>() {  new LogEntry() { StartDate=DateTime.Parse("2011-05-10 9:58:00"), ActivityDescription="Three" + Environment.NewLine},  
                                                            new LogEntry() { StartDate=DateTime.Parse("2011-05-10 9:58:00"), ActivityDescription="Four" + Environment.NewLine}};
            this.lstBox.ItemsSource = leList;
        }
    }

    public class LogEntry
    {
        public DateTime StartDate { get; set; }
        public string ActivityDescription { get; set; }
    }
}
<Window x:Class="ActivityLog.LogPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:local="clr-namespace:ActivityLog.Classes"  
        Title="LogPage" Height="564" Width="414" >
    <Grid>
        <ListBox Width="361" Margin="20,50,0,0" ItemsSource="{Binding}" Name="lstBox" Height="429" VerticalAlignment="Top" HorizontalAlignment="Left">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Text="{Binding Path=StartDate}"/>
                        <TextBlock Text="{Binding Path=ActivityDescription}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

Ответы [ 2 ]

0 голосов
/ 13 мая 2011

Строки, связывающие текстовое поле, должны содержать:

Text="{Binding Path=(local:StartDate)}"
Text="{Binding Path=(local:ActivityDescription)}"
0 голосов
/ 11 мая 2011

Вы устанавливаете ItemSource ListBox дважды.Однажды в вашем codebehind

this.lstBox.ItemsSource = leList;

, затем снова в вашем xaml

ItemsSource="{Binding}"

В приведенном примере верна только версия codebehind, и вам следует удалить версию xaml.

Ваша версия xaml фактически привязана к свойству DataContext вашего LogPage, поэтому, если вы хотите подключить его таким образом, ваш код должен быть настроен на

this.DataContext = leList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...