前言:
为什么要写这篇文章呢,因为我平时学的东西挺多的,但是遇到一些问题的时候,总是觉得自己在那里做过,没有做好总结。借助博客平台,将自己用的,学到的做个记录,方便自己和需要的人进行查阅。
这篇文章的内容:正如标题所述,WPF 的xaml 中的数据源。其实WPF 开发中我认为数据的绑定,可谓是重要操作,一个系统没有做好数据的接入,那么它将失去灵魂。
正文:
1.WPF 中的xaml 数据源有几种形式
共有三种形式,分别为DataContext ,Resource,Element(Relativesource)
<Window x:Class="LiveCharts2Demo.MainWindow"
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"
xmlns:local="clr-namespace:LiveCharts2Demo"
mc:Ignorable="d"
xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:ViewModel x:Name="ttm"/>
</Window.DataContext>
<lvc:CartesianChart
Series="{Binding Series}">
</lvc:CartesianChart>
</Window>
上图是DataContext的写法。相当于在该Window 中定义了一个ViewModel 的对象。
Resouce 的写法
<Window x:Class="LiveCharts2Demo.MainWindow"
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"
xmlns:local="clr-namespace:LiveCharts2Demo"
mc:Ignorable="d"
xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.Resources>
<local:ViewModel x:Key="vmy"/>
</Grid.Resources>
<lvc:CartesianChart
Series="{Binding Source={StaticResource vmy},Path=Series}">
</lvc:CartesianChart>
</Grid>
</Window>
注意,这里用Resource 后,在binding 的时候区别,这里需要指定Source ,和Path。特别注意,每一个resouce 都需要一个key ,像上面的vmy 就是一个key
RelativeSource 的写法
<Window x:Class="LiveCharts2Demo.MainWindow"
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"
xmlns:local="clr-namespace:LiveCharts2Demo"
mc:Ignorable="d"
xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid.Resources>
<local:ViewModel x:Key="vmy"/>
</Grid.Resources>
<Grid x:Name="张三">
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Grid}},Path=Name}"></TextBlock>
<TextBlock Margin="120,0,0,0" x:Name="测试丽丽" Text="{Binding RelativeSource={RelativeSource Self},Path=Name}"></TextBlock>
</Grid>
</Grid>
</Window>
还有一种是在做ControlTemplate 用的比较多的binding
{Binding RelativeSource={RelativeSource TemplatedParent}}
这里就不代码举例了,等后边有真正的需求的时候,补上。