2014-09-18 75 views
0

Visual Studio 2013 XAML编辑器不显示我的虚拟数据。如果我设置makeDummy = true并运行,则会看到相关数据(两个字段,带有正确的标签)。但它没有在设计师身上显示。如何在设计模式下查看虚拟数据?设计时数据未显示?

public partial class InputDialog : Window { 
    public ObservableCollection<KeyValueViewModel> Items { get; set; } 

    public InputDialog(){ 
     bool makeDummy = DesignerProperties.GetIsInDesignMode(this); 
     if (makeDummy) { 
      Items = new ObservableCollection<KeyValueViewModel>()    { 
       new KeyValueViewModel() {Key = "Top:"}, 
       new KeyValueViewModel() {Key = "Middleton:"} 
      }; 
     } 
     InitializeComponent(); 
    } 

    private void CancelButton_Click(object sender, RoutedEventArgs e) { DialogResult = false; } 
    private void OkButton_Click(object sender, RoutedEventArgs e) { DialogResult = true; } 
} 

请忽略的属性,接口继承,事件和方法 - 他们只是实施INotifyPropertyChanged所需的行为:

[NotifyPropertyChangedAspect] 
public class KeyValueViewModel : IRetrievableNotifyPropertyChanged{ 
    public string Value { get; set; } 
    public string Key { get; set; } 
    public event PropertyChangedEventHandler PropertyChanged; 
    public PropertyChangedEventHandler GetPropertyChangedEventHandler() { return PropertyChanged; } 
} 

这是XAML:

<Window x:Class="Dre.InputDialog" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     mc:Ignorable="d" 
     DataContext="{Binding RelativeSource={RelativeSource Self}}" 
     d:DataContext="{Binding RelativeSource={RelativeSource Self}}" 
     FocusManager.FocusedElement="{Binding ElementName=FieldsContainerGrid}" 
     Height="165" Width="341">  
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="127*"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <Grid Name="FieldsContainerGrid" Margin="20,20,20,0" Grid.Row="0" MinWidth="100" MinHeight="50"> 
      <ListView ItemsSource="{Binding Items}"> 
       <ListView.ItemTemplate> 
        <DataTemplate> 
         <WrapPanel> 
          <Label Content="{Binding Key}" Background="Red"></Label> 
          <TextBox Text="{Binding Value}"></TextBox> 
         </WrapPanel> 
        </DataTemplate> 
       </ListView.ItemTemplate> 
      </ListView> 
     </Grid> 

     <StackPanel Margin="5" Grid.Row="1" HorizontalAlignment="Center" Orientation="Horizontal"> 
      <Button Margin="5" Width="100" Height="20" Click="OkButton_Click" IsDefault="True"> 
       Save 
      </Button> 
      <Button Margin="5" Width="100" Height="20" Click="CancelButton_Click" IsCancel="True"> 
       Cancel 
      </Button> 
     </StackPanel> 
    </Grid> 
</Window> 

回答

2

的设计师实例化您的基类(Window),而不是您的代码隐藏类。

最简单的解决方案是让一个静态假人模型属性,然后写

d:DataContext="{x:Static local:DummyModel.Instance}" 
+0

你是什么意思? 'Window'没有什么可显示的,'InputDialog'永远不会被设计者创建? – Tar 2014-09-18 16:54:28

+0

确切地说, – SLaks 2014-09-18 16:57:39

+0

让我明白这一点 - 设计者创建了“纯粹的”Window实例,它根据“XAML”('ListView','Button',等等......)?那么'DesignerProperties.GetIsInDesignMode(this)'有什么用? – Tar 2014-09-18 17:02:09