WPF数据绑定
绑定的几种方式
Binding对象、静态变量、常量以及枚举类型
<Window.Resources>
<!-- 不是静态类型以及常量枚举要先指定 -->
<local:MyResource x:Key="myress" />
</Window.Resources>
<Window.DataContext>
<!-- 定义上下文 -->
<local:MainViewModel />
</Window.DataContext>
<Grid>
<StackPanel>
<!--DataContext上下文方式binding-->
<TextBlock Text="{Binding Path=Message}" />
<!--普通对象绑定-->
<TextBlock Text="{Binding Source={StaticResource myress}, Path=MessageClass}" />
<!--静态对象绑定-->
<TextBlock Text="{Binding Source={x:Static local:MyResource.StaticString}, Path=.}" />
<!--常量绑定-->
<TextBlock Text="{Binding Source={x:Static local:MyResource.ConstString}, Path=.}" />
<!--枚举绑定-->
<TextBlock Text="{Binding Source={x:Static local:Sex.男}, Path=.}" />
<!--对于静态对象,常量,枚举要用 Source={x:Static 位置绑定-->
</StackPanel>
</Grid>
class MyResource
{
public string MessageClass { get; } = "Public Property";
public static string StaticString = "static string";
public const string ConstString = "const ConstString";
}
public enum Sex
{
男,
女
}
显示结果
1次绑定多条信息
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="Position: {0},{1:F3}">
<Binding ElementName="wpfForm" Path="Top"/>
<Binding ElementName="wpfForm" Path="Left"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
绑定的各种小技巧
<!-- 绑定的内容为null时显示的内容 -->
<TextBlock Text="{Binding Path=MessageTest, TargetNullValue='用户名'}" />
<!--找不到绑定信息提示内容-->
<TextBlock Text="{Binding Path=MessageTest1, FallbackValue='找不到绑定信息'}" />
ElementName 元素绑定
<StackPanel >
<TextBlock Text="Admin" Name="txtB1" FontSize="30"/>
<Button Content="{Binding ElementName=txtB1 ,Path=Text}"/>
</StackPanel>
//Button绑定了TextBlock 中的Text属性
RelativeSource 相对于本身或父元素
<!--绑定自身的一些属性-->
<Button Content="{Binding RelativeSource={RelativeSource Mode=Self} ,Path=Height}"/>
<!--绑定其父级容器的属性-->
<Button Content="{Binding RelativeSource={RelativeSource Mode=FindAncestor ,AncestorType={x:Type Grid}},Path=RowDefinitions.Count}"/>
ItemSouce 绑定到集合元素
<ListBox ItemsSource="{Binding Menus}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Background="Transparent" Orientation="Horizontal">
<!-- 图标以及内容 -->
<materialDesign:PackIcon Margin="15,0" Kind="{Binding Icon}" />
<TextBlock Text="{Binding Title}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
DataContext MVVM上下文绑定
这个是最常用的,就不写代码了