2013-01-24 40 views
0
的主窗口控制

我知道這很簡單。訪問類

我有Mainwindow它有一個文本框。在文本框內容更改事件發生,即textboxtext_changed之後,我希望文本框再次變空。

我在其他類中有一個函數,它在textboxtext_changed中執行。我正在考慮在其他類的函數中清除文本框,但是我無法訪問mainwindow控件,我不想在那裏創建mainwindow的實例。

有沒有簡單的方法來做到這一點?

回答

2
public void function(ref TextBox textBox) 
{ 
    textbox.Text = string.empty; 
} 
+1

+1我,但爲什麼裁判? –

+0

這是函數,它是如何解決問題,如果我把字符串.empty在textboxtext_changed然後它得到空白,儘快執行函數即使我沒有看到文本,即使它在此之前是空白 – uncia

1

從您的框TextChanged功能,您可以從發送者

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    ((TextBox)sender).Text = ""; 
} 
+0

但它永遠不會顯示它執行的文本功能清除速度非常快,以至於我永遠無法看到文本框中的內容 – uncia

+0

是的。每次他們按下一把鑰匙時,都會被擦掉,因爲我們正在擦除它。但是我假設你在讓這行代碼執行並擦除之前,想對文本做些什麼。在執行此行之前先將代碼放入。 –

+1

如果您想要清除該類中的文本框,但不是在TextChanged事件中,那麼您需要查看上面的Anandkumar解決方案。將文本框作爲參數傳遞到類中,或者爲該類設置文本框屬性,並將其作爲值分配給文本框,以便在需要時可以在類中使用它。 –

0

訪問TextBox控件以及MVVM它可以很容易的:

  1. 在你的視圖模型聲明一個字符串屬性。
  2. TextBox.Text屬性綁定到此字符串屬性,並將UpdateSourceTrigger設置爲PropertyChanged並將模式設置爲TwoWay。
  3. 每當屬性在ViewModel上發生變化時,執行您的邏輯。

視圖模型

public class MyViewModel : INotifyPropertyChanged 
    { 
     private string someText; 

     public string SomeText 
     { 
      get 
      { 
       return this.someText; 
      } 
      set 
      { 
       this.someText = value; 

       if (SomeCondition(this.someText)) 
       { 
        this.someText = string.Empty; 
       } 

       var epc = this.PropertyChanged; 
       if (epc != null) 
       { 
        epc(this, new PropertyChangedEventArgs("SomeText")); 
       } 
      } 
     } 
    } 

XAML

<TextBox Text="{Binding SomeText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>