Förstå hur man använder avancerade data binding-tekniker i WPF, inklusive MultiBinding och Value Converters. Lär dig också att arbeta effektivt med DataContext.
DataContext är den datakälla som binder till UI-elementen. Det är grunden för data binding i WPF och kan sättas på olika nivåer:
MainWindow.xaml.cs:public MainWindow()
{
InitializeComponent();
DataContext = new MainViewModel();
}
MainWindow.xaml:<TextBlock Text="{Binding Name}" DataContext="{Binding Source={StaticResource Person}}" />
MultiBinding tillåter att kombinera flera datakällor i en binding.
FullNameConverter som kombinerar förnamn och efternamn:using System;
using System.Globalization;
using System.Windows.Data;
public class FullNameConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return $"{values[0]} {values[1]}";
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window.Resources>
<local:FullNameConverter x:Key="FullNameConverter" />
</Window.Resources>
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource FullNameConverter}">
<Binding Path="FirstName" />
<Binding Path="LastName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
public string FirstName { get; set; } = "Anna";
public string LastName { get; set; } = "Svensson";
Value Converters används för att omvandla data mellan källa och UI-element.
BoolToVisibilityConverter:using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
public class BoolToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
<Window.Resources>
<local:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter" />
</Window.Resources>
<Button Content="Visa" Visibility="{Binding IsVisible, Converter={StaticResource BoolToVisibilityConverter}}" />
public bool IsVisible { get; set; } = true;
IsVisible.Master-Detail Binding är en vanlig design för att visa en lista med objekt (master) och detaljer om det valda objektet (detail).
public ObservableCollection<Person> People { get; set; } = new ObservableCollection<Person>
{
new Person { FirstName = "Anna", LastName = "Svensson" },
new Person { FirstName = "Björn", LastName = "Andersson" }
};
public Person SelectedPerson { get; set; }
<ListBox ItemsSource="{Binding People}" SelectedItem="{Binding SelectedPerson}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding FirstName}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<TextBlock Text="{Binding SelectedPerson.LastName}" />
Nästa lektion kommer vi att titta på navigering och hur man hanterar flera fönster och sidor i en WPF-applikation.