WPF 自定义控件UserContrl 属性双向绑定
程序员文章站
2022-03-04 11:27:56
...
<UserControl x:Class="DXApplication1.Control.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:DXApplication1.Control"
mc:Ignorable="d"
x:Name="uc"
d:DesignHeight="200" d:DesignWidth="200">
<Grid >
<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23"
Text="{Binding TextT, Mode=TwoWay,ElementName=uc}"
TextWrapping="Wrap" VerticalAlignment="Top" Width="120"/>
</Grid>
</UserControl>
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
}
public string TextT
{
get { return (string )GetValue(TextTProperty); }
set { SetValue(TextTProperty, value); }
}
// 当外部绑定后,数据变化时,属性会变化,但是界面不会更新
//public static readonly DependencyProperty TextTProperty =
// DependencyProperty.Register("TextT", typeof(string ), typeof(UserControl1), new PropertyMetadata(null));
// 当外部绑定后,数据变化时,界面更新
public static readonly DependencyProperty TextTProperty =
DependencyProperty.Register("TextT", typeof(string), typeof(UserControl1), new PropertyMetadata(null, (s, e) =>
{
((UserControl1)s).TextT = (string)e.NewValue;
}));
}
<dx:ThemedWindow
x:Class="DXApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core"
xmlns:Views="clr-namespace:DXApplication1.Views"
xmlns:control="clr-namespace:DXApplication1.Control"
xmlns:viewmodels="clr-namespace:DXApplication1.ViewModels"
Title="MainWindow" Height="800" Width="1000">
<dx:ThemedWindow.DataContext>
<viewmodels:MainViewModel x:Name="viewModel"/>
</dx:ThemedWindow.DataContext>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<control:UserControl1 Grid.Row="1" TextT="{Binding ttt, Mode=TwoWay}"></control:UserControl1>
</Grid>
</dx:ThemedWindow>
public class MainViewModel : ViewModelBase
{
private string _t;
public string ttt
{
get { return _t; }
set
{
_t = value;
RaisePropertiesChanged(nameof(ttt));
}
}
}