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 odpowiedzi
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; }
}
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.
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.