gpt4 book ai didi

wpf - Binding UpdateSourceTrigger=Explicit,在程序启动时更新源

转载 作者:行者123 更新时间:2023-12-02 09:39:26 27 4
gpt4 key购买 nike

我有以下代码:

<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”键时更新源。这很好用。但是,绑定(bind)会在程序启动时更新源。我怎样才能避免这种情况?我错过了什么吗?

最佳答案

问题是,DataBinding 在调用 Show 时得到解决(以及在 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();
}

关于wpf - Binding UpdateSourceTrigger=Explicit,在程序启动时更新源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1516588/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com