2009-10-04 72 views
6

明確,更新源我有以下代碼:綁定UpdateSourceTrigger =在程序啓動時

<Window x:Class="WpfApplication1.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 
<Grid> 
    <TextBox Text="{Binding Path=Name, 
          Mode=OneWayToSource, 
          UpdateSourceTrigger=Explicit, 
          FallbackValue=default text}" 
      KeyUp="TextBox_KeyUp" 
      x:Name="textBox1"/> 
</Grid> 

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
    } 

    private void TextBox_KeyUp(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Enter) 
     { 
      BindingExpression exp = this.textBox1.GetBindingExpression(TextBox.TextProperty); 
      exp.UpdateSource(); 
     } 
    } 
} 



    public class ViewModel 
{ 
    public string Name 
    { 
     set 
     { 
      Debug.WriteLine("setting name: " + value); 
     } 
    } 
} 



    public partial class App : Application 
{ 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     Window1 window = new Window1(); 
     window.DataContext = new ViewModel(); 
     window.Show(); 
    } 
} 

我只想更新時,「Enter」鍵在文本框中按下源。這工作正常。但在程序啓動時綁定更新源。我怎樣才能避免這種情況?我錯過了什麼嗎?

回答

-2

更改綁定模式默認

<TextBox Text="{Binding Path=Name, 
        Mode=Default, 
        UpdateSourceTrigger=Explicit, 
        FallbackValue=default text}" 
     KeyUp="TextBox_KeyUp" 
     x:Name="textBox1"/> 
+0

如何是,應該幫助嗎? –

0

的問題是,數據綁定上顯示(和上的InitializeComponent電話解決,但這不是對你很重要,因爲在那指出你的DataContext尚未設置)。我不認爲你可以阻止,但我有一個解決方法的想法:

在調用Show()之前不要設置DataContext。你可以做到這一點(例如)是這樣的:

public partial class Window1 : Window 
{ 
    public Window1(object dataContext) 
    { 
     InitializeComponent(); 

     this.Loaded += (sender, e) => 
     { 
      DataContext = dataContext; 
     }; 
    } 
} 

和:

protected override void OnStartup(StartupEventArgs e) 
{ 
    base.OnStartup(e); 

    Window1 window = new Window1(new ViewModel()); 
    window.Show(); 
} 
相關問題