第一种binding 绑定到元素上
<Slider x:Name="sd" Width="800" />
<TextBox Text="{Binding ElementName=sd ,Path=Value}">
这种binding就是binding到元素上,第二行代码<TextBox Text="{Binding ElementName=sd ,Path=Value}">
ElementName就是指定元素的Name Path就是元素的属性值。
第二种binding到资源上
<Window.Resources>
<TextBox x:Key="txt">Hello</TextBox>
</Window.Resources>
<Slider x:Name="sd" Width="800" />
<TextBox Text="{Binding Source={StaticResource txt},Path=Text}"/>
这种binding是binding到资源上,<TextBox Text="{Binding Source={StaticResource txt},Path=Text}"/>这个就是binding到资源的方式。StaticResource就是查找资源中的Name。
第三种binding数据上下文
XAML代码
<TextBox x:Name="txt" Text="{Binding Name",FallbackValue="Not Found"}/>
C#中代码
public Mainwindow()
{
InitialzeComponent();
txt.DataContext = new Person(){ Name = "ABC"}
}
public class Person
{
public string Name{get;set;}
}
其中txt.DataContext = new Person(){ Name = "ABC"} FallbackValue是设置默认值的。
这里面的Name是<TextBox x:Name="txt" Text="{Binding Name"/>中的Name,而txt是XAML中的Name属性。
也可以把C#代码写到其他cs文件中,
public class MainVieModel
{
public MainVieModel()
{
Name = "Hello";
}
public string Name{get;set;}
}
在MainWindow函数中
public Mainwindow()
{
InitialzeComponent();
this.DataContext = new MainVieModel();
}
在XAML中
<TextBox x:Name="txt" Text="{Binding Name",FallbackValue="Not Found"}/>
在其他位置创建一个文件夹,保证命名空间一致即可。
要想实时更新到UI
xxx.cs中的代码
public class MainVieModel : INotifyProertyChanged
{
public MainVieModel()
{
Name = "Hello";
task.Run(
async() =>
{
await Task.Delay(3000);//3s
Name = "No";
}
);
}
public string Name;
public string Name
{
get{return name;}
set{
name = value;
OnPropertyChanged("Name");
}
}
public event PropertyChangedEcentHandler ProertyChanged;
protected void OnPropertyChanged(string properName)
{
if(PropertyChanged != null)
{
PropertyChanged(this,new PropertyChangedEventArgs(properName));
}
}
}
其他的不变
这是个延时函数
task.Run(
async() =>
{
await Task.Delay(3000);//3s
Name = "No";
}
);