在XAML中,可以绑定到许多不同类型的数据源和属性。以下是一些可以绑定的常见数据源和属性:
属性:可以绑定到对象的属性,例如控件的Text、Visibility、IsEnabled等属性。
集合:可以绑定到集合数据,如List、ObservableCollection、Array等。在绑定到集合时,还可以使用索引器绑定到特定项。
静态资源:可以使用x:Static引用静态字段或属性,如常量、枚举、静态类的属性等。
数据上下文:在WPF和其他XAML框架中,每个元素都有一个数据上下文,可以在此上下文中绑定到其父元素的属性或继承的数据上下文的属性。
数据模型:可以绑定到MVVM(Model-View-ViewModel)模式中的数据模型,通常是一个实现INotifyPropertyChanged接口的类。
XML和JSON数据:可以绑定到XML或JSON数据,使用XMLDataProvider或ObjectDataProvider等。
资源字典:可以绑定到资源字典中的资源,如样式、模板、图像等。
命令:可以使用Command绑定到自定义命令,以在用户交互时执行操作。
视觉状态:可以绑定到不同的视觉状态,以根据应用程序的当前状态更改UI。
动画:可以绑定到动画属性,以在动画执行时更改UI元素的属性。
这些只是一些常见的绑定数据源,实际上,XAML绑定是非常灵活的,可以将其用于几乎任何具有属性或数据的地方。数据绑定是XAML中非常强大的特性,可以用于创建动态、交互式和可扩展的用户界面。
一、Source
<Window x:Class="BindingTest.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:BindingTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:MainWindowViewModel></local:MainWindowViewModel>
</Window.DataContext>
<Window.Resources>
</Window.Resources>
<StackPanel>
<TextBlock Text="{Binding}" FontSize="30"></TextBlock>
</StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace BindingTest
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
public class MainWindowViewModel
{
public string Message => "this is test";
public override string ToString()
{
return "hello world";
}
}
}
后台实现binding
<Window x:Class="BindingTest.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:BindingTest"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<Window.DataContext>
<local:MainWindowViewModel></local:MainWindowViewModel>
</Window.DataContext>
<Window.Resources>
</Window.Resources>
<StackPanel>
<TextBlock x:Name="tbl" FontSize="30"></TextBlock>
</StackPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace BindingTest
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var binding = new Binding
{
Path = new PropertyPath("Message"),
Mode = BindingMode.TwoWay,
};
BindingOperations.SetBinding(tbl, TextBlock.TextProperty, binding);
}
}
public class MainWindowViewModel
{
private string message = "this is test";
public string Message
{
get { return message; }
set { message = value; }
}
}
}
这是尝试在TextBlock元素的Source属性上使用DynamicResource,但是Source属性不是DependencyProperty,因此无法直接使用DynamicResource。只能在DependencyObject的DependencyProperty上使用DynamicResource。
使用属性、静态属性、常量资源
标签:知识点,Windows,绑定,Binding,System,using,WPF,public,属性 From: https://blog.51cto.com/u_15319978/8245937