Ustawiam moją DataGrid tak, aby zwijała się, gdy nie ma żadnych elementów

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

Problem polega na tym, że chciałbym, aby pojawił się w trybie projektowania. Jak to zrobić? Czy powinienem tworzyć fałszywe dane?

Próbowałem

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

Ale to nie zadziałało

2
Jader Dias 9 marzec 2012, 00:53

2 odpowiedzi

Najlepsza odpowiedź

Jeśli rozumiem, co próbujesz zrobić, to działa dla mnie dobrze:

<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; }
}
3
Simon Whittemore 9 marzec 2012, 01:34

Miałem podobny problem w aplikacji Silverlight, w której nie chciałem pokazywać żadnej zawartości użytkownikowi, dopóki nie był zalogowany. Ustawiłem widoczność widoku na „Zwinięty” w konstruktorze widoku, a następnie z powrotem na „ Widoczne” po uwierzytelnieniu/autoryzacji użytkownika. Sugeruję, abyś powiązał się z właściwością Visibility swojego Grid w konstruktorze widoku, aby nie zadziałało to, dopóki kod nie zostanie wykonany, dzięki czemu możesz zobaczyć Grid w widoku projektu. Niewiele zrobiłem w WPF, ale coś takiego może zadziałać:

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

Znowu nie mam pojęcia, czy to zadziała w WPF, ale może to cię przybliży.

1
Chris 9 marzec 2012, 01:32