在我的WPF應用程序中,我有一些數據綁定文本框。這些綁定的UpdateSourceTrigger
是LostFocus
。該對象使用文件菜單進行保存。我遇到的問題是,可以在文本框中輸入新值,從文件菜單中選擇保存,並且永不保留新值(在文本框中可見的值),因爲訪問菜單不會從文本框中移除焦點。我怎樣才能解決這個問題?有沒有辦法強制頁面中的所有控件都綁定到數據綁定?保存之前的WPF數據綁定
@palehorse:好點。不幸的是,我需要使用LostFocus作爲我的UpdateSourceTrigger以支持我想要的驗證類型。
@dmo:我已經想到了。然而,對於一個相對簡單的問題,它似乎是一個非常不雅的解決方案。此外,它要求在頁面上有一些控件總是可見的以獲得焦點。然而,我的應用程序是選項卡,因此不容易出現這種控制。
@Nidonocu:使用菜單沒有移動焦點從TextBox混淆了我的事實。然而,這是我所看到的行爲。下面的簡單示例演示了我的問題:
<Window x:Class="WpfApplication2.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">
<Window.Resources>
<ObjectDataProvider x:Key="MyItemProvider" />
</Window.Resources>
<DockPanel LastChildFill="True">
<Menu DockPanel.Dock="Top">
<MenuItem Header="File">
<MenuItem Header="Save" Click="MenuItem_Click" />
</MenuItem>
</Menu>
<StackPanel DataContext="{Binding Source={StaticResource MyItemProvider}}">
<Label Content="Enter some text and then File > Save:" />
<TextBox Text="{Binding ValueA}" />
<TextBox Text="{Binding ValueB}" />
</StackPanel>
</DockPanel>
</Window>
using System;
using System.Text;
using System.Windows;
using System.Windows.Data;
namespace WpfApplication2
{
public partial class Window1 : Window
{
public MyItem Item
{
get { return (FindResource("MyItemProvider") as ObjectDataProvider).ObjectInstance as MyItem; }
set { (FindResource("MyItemProvider") as ObjectDataProvider).ObjectInstance = value; }
}
public Window1()
{
InitializeComponent();
Item = new MyItem();
}
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(string.Format("At the time of saving, the values in the TextBoxes are:\n'{0}'\nand\n'{1}'", Item.ValueA, Item.ValueB));
}
}
public class MyItem
{
public string ValueA { get; set; }
public string ValueB { get; set; }
}
}
此解決方案僅適用於TextBox。有沒有辦法讓它適用於任何控制? – 2008-09-24 14:13:52