Привязка WPF ListView к пользовательскому классу - PullRequest
1 голос
/ 01 апреля 2011

Мой вопрос довольно прост, как кажется. Но способ, которым я пытаюсь это реализовать, немного сложен. Я реализовал шаблон Singleton, чтобы использовать некоторые глобальные данные. У меня есть класс Contact History. Я хочу связать некоторые его свойства с ListView-> GridView-> GridViewColumn. У меня есть список, который я хочу связать. Я просмотрел некоторые учебные пособия и попытался их реализовать, но, похоже, с моим кодом XAML есть некоторые проблемы, потому что когда я связываю объект-список, он может решить его путь. Похоже, я не включаю что-то правильно. Ниже приведен код, который потребуется

Класс Singleton

     class Singleton
        {
            private static Singleton instance = new Singleton();
            public List<Contacts> ContactList ;

            public SQLiteConnectionStringBuilder builder;
            public SqLiteProvider _db;
            public DataHelper _helper;
            public DataTable DataTable_Contacts;
            public DataTable DataTable_ContactHistory;
            public List<String> Contact_Names;
            public ListBox ListBox_names;
            public int Contact_Index;
            public int ContactHistory_Index;

            private Singleton()
            {
                ContactList = new List<Contacts>();

                builder = new SQLiteConnectionStringBuilder();
                builder.DataSource = Util.GetCurrentDirectory() + "TestDatabases\\DatabaseAccessLayerSqlLite.db";
                _db = new SqLiteProvider();
                _db.ConnectionString = builder.ConnectionString;
                _helper = new DataHelper(_db);
                DataTable_Contacts = new DataTable();
                DataTable_ContactHistory = new DataTable();
                Contact_Names = new List<string>();
            }
       .
       .
}

Код Xaml

<Window x:Class="NET_Data_Access_Layer_Demo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:themes="clr-namespace:WPF.Themes;assembly=WPF.Themes"
        xmlns="clr-namespace:NET_Data_Access_Layer_Demo.Properties"

        Title="Customer Contact Manager" Height="535" Width="702" Loaded="Window_Loaded" Activated="Window_Activated">
        <GroupBox Header="History" Height="230" HorizontalAlignment="Left" Margin="182,252,0,0" Name="groupBox_history" VerticalAlignment="Top" Width="487">
            <Grid>
                <Button Content="Edit" Height="23" HorizontalAlignment="Left" Margin="164,163,0,0" Name="button_edithistory" VerticalAlignment="Top" Width="75" Click="button_edithistory_Click" IsEnabled="False" />
                <Button Content="Delete" Height="23" HorizontalAlignment="Left" Margin="269,163,0,0" Name="button_deletehistory" VerticalAlignment="Top" Width="75" IsEnabled="False" Click="button_deletehistory_Click" />
                <Button Height="23" HorizontalAlignment="Left" Margin="62,163,0,0" Name="button_addhistory" VerticalAlignment="Top" Width="75" Click="button_addhistory_Click" Content="Add" IsEnabled="False" />
                <ListView IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ContactHistoryList}" Height="129" HorizontalAlignment="Left" Margin="33,19,0,0" Name="listView_history" VerticalAlignment="Top" Width="419">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn Header="Date"  Width="80" DisplayMemberBinding="{Binding ContactHistory_Date}" />
                            <GridViewColumn Header="Type"  Width="80" DisplayMemberBinding="{Binding ContactHistory_Type}" />
                            <GridViewColumn Header="Note"  Width="300" DisplayMemberBinding="{Binding ContactHistory_Note}" />
                        </GridView>
                    </ListView.View>
                </ListView>
            </Grid>
        </GroupBox>
.
.
.
</window>

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

С уважением Umair

Ответы [ 2 ]

1 голос
/ 01 апреля 2011

(Где вы назначаете текстовый текст? Для чего вы его назначаете?)

В вашем коде нет нигде свойства с именем ContactHistoryList.Это означает, что источник элемента не может быть правильно привязан, для начала, если в контексте данных нет ничего, что вы не объясняете.

Кроме того, невозможно связать с открытыми полями, используя WPF.Вам нужно обернуть свои поля в общедоступные свойства и связать их с ними.

0 голосов
/ 01 апреля 2011

Удалить обязательный параметр из списка.

Назначить listview.itemssource по коду.в противном случае добавьте ObjectCollection к ресурсам с помощью x: Key = "ContactHistoryList"

пока tiz

попробуйте это: <ListView IsSynchronizedWithCurrentItem="True"<br> ItemsSource="{Binding ContactHistoryList}"<br> Height="129" HorizontalAlignment="Left" Margin="33,19,0,0" Name="listView_history" VerticalAlignment="Top" Width="419"><br> <ListView.ItemTemplate><br> <DataTemplate><br> <ListViewItem><br> <GridView><br> <GridViewColumn Header="Date" Width="80" DisplayMemberBinding="{Binding ContactHistory_Date}" /><br> <GridViewColumn Header="Type" Width="80" DisplayMemberBinding="{Binding ContactHistory_Type}" /><br> <GridViewColumn Header="Note" Width="300" DisplayMemberBinding="{Binding ContactHistory_Note}" /><br> </GridView><br> </ListViewItem><br> </DataTemplate><br> </ListView.ItemTemplate><br> </ListView>

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