C#/ WPF - DesignData - 绑定到DesignData集合属性

时间:2011-04-02 17:07:58

标签: c# wpf

我喜欢设计时间数据,特别是在创建小窗口小部件时。对于这个非常简单的用例,我无法绑定到我在xaml中创建的设计时列表的属性。

请在下面找到我的ViewModel,View和SampleData;

视图模型

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,以便绑定到其中指定的列表的计数?

我尝试将资源类型设置为DesignDataDesignDataWithDesignTimeCreatableTypes但没有运气。

3 个答案:

答案 0 :(得分:2)

应该是:

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

Mårten也是正确的,你应该使用ObservableCollection。

HTH

答案 1 :(得分:2)

CityView,正如旁注:调试DataBinding我通常使用一个只返回给定值的空转换器。我在那里放了一个断点,这样我就可以看到究竟是来回的。

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;
    }
}

结合这一点以及“输出”窗口告诉我的内容通常会让我找到解决问题的方法。

答案 2 :(得分:1)

它应该有效,但由于您的列表未实现INotifyPropertyChanged,因此成为一次性绑定,因此Count更改时绑定不会更新。

请尝试使用ObservableCollection<Person>