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>
答案 0 :(得分:2)
设计器实例化您的基类(Window
),而不是您的代码隐藏类。
最简单的解决方案是创建一个静态虚拟模型属性,然后编写
d:DataContext="{x:Static local:DummyModel.Instance}"