【发布时间】:2017-02-09 01:16:20
【问题描述】:
当我在Textbox 中输入文本时,它会同时更新两个TextBlocks。我正在尝试检索该值以将其保存到 sql 数据库中。我暂时将其设置为在 MessageBox 中显示值。
视图模型/模型:
private decimal _amount;
public decimal Amount
{
get
{
return _amount;
}
set
{
_amount = value;
OnPropertyChanged("Amount");
}
}
文本框绑定:
<TextBox MaxLength="7" Visibility="{Binding Hide1, Converter={StaticResource BoolToVis},FallbackValue=Visible}" Text="{Binding Amount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="2" />
TextBlocks 绑定:
<TextBlock Foreground="Black" Margin="0 0 0 0" VerticalAlignment="Top" Grid.Column="3" Text="{Binding Path=Amount}"/>
<TextBlock Grid.Column="3" Text="{Binding Amount}" Foreground="Black" Margin="0 0 0 0" VerticalAlignment="Bottom"/>
保存命令:
private async void Save()
{
try
{
MessageBox.Show(string.Format("{0}", Amount));
}
catch (DbEntityValidationException ex)
{
foreach (var en in ex.EntityValidationErrors)
{
var exceptionDialog = new MessageDialog
{
Message = { Text = string.Format("{0}, {1}", en.Entry.Entity.GetType().Name, en.Entry.State) }
};
await DialogHost.Show(exceptionDialog, "RootDialog");
foreach (var ve in en.ValidationErrors)
{
exceptionDialog = new MessageDialog
{
Message = { Text = string.Format("{0}, {1}", ve.PropertyName, ve.ErrorMessage) }
};
await DialogHost.Show(exceptionDialog, "RootDialog");
}
}
}
catch(Exception ex)
{
var exceptionDialog = new MessageDialog
{
Message = { Text = string.Format("{0}", ex) }
};
await DialogHost.Show(exceptionDialog, "RootDialog");
}
}
当我点击保存时,MessageBox 显示 0。
编辑:我刚刚记得我将ViewModel 连接到两个UserControls。我的TabLayout,处理TabItems的内容;和工资单,其中包含保存按钮和一个TabControl,它将TabLayout 加载到每个TabItem 中。
两者的数据上下文是:
public TabLayout()
{
InitializeComponent();
DataContext = new PayslipModel();
}
public Payroll()
{
InitializeComponent();
DataContext = new PayslipModel();
}
【问题讨论】:
-
这里的所有代码都属于同一个类吗?您确定它都在该类的同一个实例上运行吗?你试过调试这个吗?
-
如何/在哪里将 datacontext 设置为 ViewModel 实例?
-
@TaiT's 我在代码隐藏中设置它像这样
DataContext = new PayslipModel(); -
@PieterWitvoet 是的,所有代码都在同一个类中,我相信它们在该类的同一个实例上运行
-
发布的代码应该可以工作。至少它适用于我的机器。请注意,当绑定到十进制时,您将无法在框外输入小数点,请参阅Binding to decimal 要进一步调试您的绑定,请将此
PresentationTraceSources.TraceLevel=High添加到您的TextBox如果您看到该值进入您的属性然后您的 Save 命令正在另一个实例上运行。在那种情况下,将您的代码发布在后面以及如何调用保存命令。