Как связать коллекцию в списке объектов в WPF - PullRequest
0 голосов
/ 05 апреля 2019

У меня есть коллекция объектов, и в каждом объекте есть список свойств (PropertyChanges).Эти элементы должны быть перечислены в списке «listViewPropertyDetails» Listview, но даже преобразователь «propertyChangeConverter» не получает какой-либо объект для преобразования.Любое другое свойство объекта может быть привязано, например, к имени пользователя.Но если я попытаюсь связать коллекцию PropertyChanges, ничего не отобразится, конвертер не сработает.что я забыл?Я ищу часы и не могу найти правильный ответ.Надеюсь, кто-нибудь может мне помочь.

public class ObjectHistory
{
    public string Username { get; set; }
    public DateTime DateOccurred { get; set; }
    public List<PropertyChange> PropertyChanges = new List<PropertyChange>();
}

public class PropertyChange
{      
    public string PropertyName { get; set; }
    public string OldValue { get; set; }
    public string NewValue { get; set; }    
}
<DataTemplate x:Key="HistoryObjectList">
    <Expander IsExpanded="True">
        <Expander.Header>
            <MultiBinding Converter="{StaticResource historyObjectHeaderConverter}">
                <Binding Path="DateOccurred"/>
                <Binding Path="Username"/>
            </MultiBinding>
        </Expander.Header>
        <Grid Name="grid1"
              Height="Auto">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Label Name="LabelpropertyChanges"
                   Grid.Row="0"
                   HorizontalAlignment="Left"
                   Margin="15,25,0,0"
                   VerticalAlignment="Top"
                   Padding="0,0,0,0"
                   Content="PropertyChanges"
                   ></Label>                        
            <ListView Name="listViewPropertyDetails"
                      Grid.Row="1"
                      Margin="15,25,0,0"
                      HorizontalAlignment="Stretch"
                      HorizontalContentAlignment="Stretch"                                  
                      ItemsSource="{Binding PropertyChanges, Converter={StaticResource propertyChangeConverter}}"                                  
                      >                            
                <ListView.View>                            
                <GridView>
                        <GridViewColumn Header="PropertyName"

                                             Width="120"
                                             DisplayMemberBinding="{Binding PropertyName}"/>
                        <GridViewColumn Header="OldValue"
                                             Width="265"
                                             DisplayMemberBinding="{Binding OldValue}"/>
                        <GridViewColumn Header="NewValue"
                                             Width="265"
                                             DisplayMemberBinding="{Binding NewValue}"/>
                    </GridView>  
                </ListView.View>
            </ListView>
        </Grid>
    </Expander>
</DataTemplate>

1 Ответ

0 голосов
/ 24 апреля 2019

PropertyChanges определяется не как свойство, а как поле, и вы не можете связываться с полями.Вы должны определить это так:

public List<PropertyChange> PropertyChanges { get; set; } = new List<PropertyChange>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...