2011-04-02 27 views
2

我喜歡設計時數據,特別是在創建小部件時。對於這個非常簡單的用例,我無法綁定到我在xaml中創建的設計時間列表的屬性。C#/ WPF - DesignData - 綁定到DesignData集合屬性

請在下面找到我的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,但沒有運氣。

回答

2

它應該是:

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

而且貂是正確的,你應該使用一個ObservableCollection代替。

HTH

+0

這工作,非常感謝! – CityView 2011-04-02 17:22:35

+0

沒有問題的人,只是接受答案;) – Marcote 2011-04-02 17:25:32

+0

我不得不等待整個晚上36秒,有這麼多的警告,使用這個網站,如果你是新的。 – CityView 2011-04-02 17:27:06

1

它應該工作,但成爲一次性綁定,因爲您的列表不執行INotifyPropertyChanged,因此綁定在Count更改時不會更新。

嘗試使用ObservableCollection<Person>代替。

+1

感謝您的快速回復,我只是給它一個去,不幸的是這也不起作用。我應該補充說,並不是我得到'0'顯示,綁定完全失敗,並且根本沒有文本顯示。我不知道如何在設計器視圖中調試綁定失敗... – CityView 2011-04-02 17:18:02

+0

啊,對不起,我看錯了你的代碼。綁定應該是:{綁定路徑= PersonList.Count} – 2011-04-02 17:23:38

2

市景,就像一個側面說明:調試數據綁定我通常使用一個空的轉換器,只返回它被賦予的價值。我在那裏放置了一個斷點,這樣我就可以看到來回發生了什麼。

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

與此相結合,輸出窗口告訴我什麼通常導致我解決手頭上的問題。