Как просмотреть свернутые элементы при разработке элемента управления WPF? - PullRequest
2 голосов
/ 09 марта 2012

Я установил сворачивание моей DataGrid, когда нет элементов

<DataGrid Name="dataGrid"
          Visibility="{Binding HasItems,
                       ElementName=dataGrid,
                       Converter={StaticResource BooleanToVisibilityConverter}}">
</DataGrid>

Проблема в том, что я хотел бы, чтобы он отображался в режиме разработки.Как это сделать?Нужно ли создавать поддельные данные?

Я пытался

    private void UserControl_Loaded(object sender, RoutedEventArgs e)
    {
        if (DesignerProperties.GetIsInDesignMode(this))
        {
            this.dataGrid.ItemsSource = new List<Table> { new Table() };
        }
    }

, но это не сработало

Ответы [ 2 ]

3 голосов
/ 09 марта 2012

Если я понимаю, что вы пытаетесь сделать, это хорошо работает для меня:

<Window x:Class="WPFScratch.MainWindow"
    xmlns:local="clr-namespace:WPFScratch"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    mc:Ignorable="d"
    d:DesignHeight="300"  
    d:DesignWidth="592"  
    d:DataContext="{d:DesignInstance local:MyDesignTimeViewModel, IsDesignTimeCreatable=True}"
    Title="MainWindow" SizeToContent="WidthAndHeight">
<Window.Resources>
    <local:BoolToVisibilityConverter
     x:Key="BoolToHiddenConverter"
     TrueValue="Visible" FalseValue="Hidden" />        
</Window.Resources>
<DockPanel>       
    <DataGrid Name="dataGrid" ItemsSource="{Binding People}"
      Visibility="{Binding HasItems,
                   ElementName=dataGrid,
                   Converter={StaticResource BoolToHiddenConverter}}" AutoGenerateColumns="True">

    </DataGrid>
</DockPanel>

public class MyDesignTimeViewModel
{
    public ObservableCollection<Person> People
    {
        get 
        { 
            return new ObservableCollection<Person> { 
                                                        new Person 
                                                            { 
                                                                Name = "Simon" 
                                                            },
                                                        new Person 
                                                            { 
                                                                Name = "Jack" 
                                                            } 
                                                    }; 
        }
    }
}

public class Person
{
    public string Name { get; set; }
}
1 голос
/ 09 марта 2012

У меня была похожая проблема в приложении Silverlight, где я не хотел показывать контент пользователю, пока он не вошел в систему. Я установил видимость «Свернутый» в конструкторе представления, а затем вернуться к «Видимым» после того, как пользователь прошел Аутентификацию / Авторизацию. Я предлагаю вам связать свойство Visibility вашей Grid в конструкторе View, чтобы оно не вступило в силу до тех пор, пока не выполнится код, что позволит вам увидеть Grid в режиме конструктора. Я мало что сделал в WPF, но что-то вроде этого может сработать:

Binding b = new Binding("Visibility");
b.Source = dataGrid.HasItems;
b.Converter = new BooleanToVisibilityConverter();
BindingOperations.SetBinding(dataGrid, VisibilityProperty, b);

Опять же, я понятия не имею, будет ли это работать в WPF, но, возможно, это приблизит вас.

...