WPF UserControl销毁前处理

若需要在销毁UserControl前执行操作,不能指望使用Unloaded方法,你需要在UserControl的构造函数中增加类似如下代码:

public UCCaptureQuery()
{
     InitializeComponent();
     Dispatcher.ShutdownStarted += (object sender, EventArgs e)=>
     {
         _stopThread = true;
         if (null != _threadReadStatus)
         {
             _threadReadStatus.Join();
             _threadReadStatus = null;
         }
     };
 }

转自http://geekswithblogs.net/cskardon/archive/2008/06/23/dispose-of-a-wpf-usercontrol-ish.aspx

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF UserControl 绑定一般分为两种情况: 1. UserControl 内部控件与 ViewModel 绑定 在 UserControl 内部控件与 ViewModel 绑定时,需要给 UserControl 的 DataContext 属性设置为 ViewModel 的实例,然后在控件内部使用 Binding 绑定控件的属性与 ViewModel 的属性即可。 2. UserControl 的依赖属性绑定 在 UserControl 中定义依赖属性时,可以使用 DependencyProperty.Register 方法来注册依赖属性。然后在使用 UserControl 的地方,就可以使用 Binding 绑定 UserControl 的依赖属性与 ViewModel 的属性。 下面是一个示例: UserControl XAML 代码: ```xml <UserControl x:Class="MyUserControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <TextBox Text="{Binding Text, Mode=TwoWay}" /> </Grid> </UserControl> ``` UserControl CodeBehind 代码: ```csharp public partial class MyUserControl : UserControl { public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(MyUserControl)); public string Text { get { return (string)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } public MyUserControl() { InitializeComponent(); DataContext = this; } } ``` 使用 MyUserControl 的地方: ```xml <Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:MyNamespace" Title="MainWindow"> <StackPanel> <local:MyUserControl Text="{Binding MyText, Mode=TwoWay}" /> <TextBlock Text="{Binding MyText}" /> </StackPanel> </Window> ``` MainWindow CodeBehind 代码: ```csharp public partial class MainWindow : Window, INotifyPropertyChanged { private string _myText; public string MyText { get { return _myText; } set { _myText = value; OnPropertyChanged(nameof(MyText)); } } public MainWindow() { InitializeComponent(); DataContext = this; } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值