在事件内订阅事件

时间:2018-01-02 04:55:26

标签: c# events xamarin

Control.LostFocus += Control_LostFocus;

private void Control_LostFocus(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
     Control.TextChanged += Control_TextChanged;
}

private void Control_TextChanged (object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
     MessagingCenter.Send<object>(this, Messaging.Edited);
}

这是我们绑定的方式所以每次打开页面时它都会更新值,这也会触发TextChanged

public string Binding
{
    get { return _binding; }
    set { Set(ref _binding, value); }
}

它应用于自定义渲染器,因为我需要一次验证多个Entry。

我订阅了这些事件以验证在编辑模式期间Entry值是否已更改。但是条目使用绑定,因此它检测到值已经改变,这就是我首先使用LostFocus的原因。

在事件中订阅事件有多错误?

我是编程的新手,我的同事告诉我重构它,因为它可能会导致性能问题。

解决方法是什么?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我不熟悉WPF。但是,如果您在代码中设置绑定和订阅事件,则可以尝试在绑定代码之后订阅事件。例如:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        MyDataSource ds = new MyDataSource { Name = "Hello World" };
        Binding b = new Binding("Name");
        b.Source = ds;
        tb.SetBinding(TextBox.TextProperty, b); // tb is of type TextBox
        tb.TextChanged += Tb_TextChanged; // subscribe event after binding
    }

    private void Tb_TextChanged(object sender, TextChangedEventArgs e)
    {
        lbl.Content = tb.Text; // lbl is of type Label
    }
}

public class MyDataSource
{
    public string Name { get; set; }
}