C # / WPF - DesignData - привязка к свойствам коллекции DesignData - PullRequest
2 голосов
/ 02 апреля 2011

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

Ниже приведены мои ViewModel, View и SampleData;

ViewModel

internal class SummaryViewModel : ViewModelBase
{
    public string Title { get; set; }

    public IList<Person> PersonList { get; set; }

    internal SummaryViewModel()
    {
        PersonList = new List<Person>();
    }
}

Пример данных

<ViewModel:SummaryViewModel xmlns:ViewModel="ViewModel" Title="Test Title">
    <ViewModel:SummaryViewModel.Connections>
        <ViewModel:ConnectionViewModel Id="0" />
        <ViewModel:ConnectionViewModel Id="1" />
    </ViewModel:SummaryViewModel.Connections> 
</ViewModel:SummaryViewModel>

Просмотр

<StackPanel x:Class="View.SummaryView"
            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" 

            mc:Ignorable="d" 
            d:DesignHeight="100" 
            d:DesignWidth="100"
            d:DataContext="{d:DesignData Source=/DesignData/SampleSummaryViewModel.xaml}"

            Orientation="Vertical"
            Background="LightGreen">

    <!-- This Works -->
    <Label FontSize="10" FontWeight="Bold" Content="{Binding Title}" />

    <!-- This Works -->
    <ListBox ItemsSource="{Binding PersonList}" />

    <!-- This DOESN'T work -->
    <Label FontSize="8" Content="{Binding PersonList, Path=Count}"/>
</StackPanel>

Как бы вы сконфигурировали SampleData таким образом, чтобы вы могли привязать его к числу указанного в нем списка?

Я попытался установить тип ресурса как DesignData и DesignDataWithDesignTimeCreatableTypes, но безуспешно.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2011

Должно быть:

<Label FontSize="8" Content="{Binding Path=PersonList.Count}"/>

Также Мартен прав, вы должны вместо этого использовать ObservableCollection.

НТН

2 голосов
/ 14 декабря 2012

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

public class BindTestConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }
}

В сочетании с этим и тем, что окно вывода сообщает мне, обычно приводит меня к решению проблемы под рукой..

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

Должно работать, но стать одноразовой привязкой, поскольку в вашем списке не реализована INotifyPropertyChanged, и поэтому привязка не обновляется при изменении Count.

Попробуйте вместо этого использовать ObservableCollection<Person>.

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