我有一些文本框。我正在应用MVVM模型,一个文本框有keypress事件。无法访问MVVM模型中的文本框属性和标签属性。如何访问它们?当我按下divide_txt_KeyDown时,我可以在计算中调用它们吗?假设这些文本框在dataTemplate中。
<TextBox x:Name="a1" Width="96" Canvas.Top="300" Canvas.Left="20"></TextBox>
<TextBox x:Name="a2" Width="96" Canvas.Top="300" Canvas.Left="144"/>
<TextBox x:Name="add_txt" Width="96" Canvas.Top="344" Canvas.Left="20"/>
<TextBox x:Name="multiple_txt" Width="96" Canvas.Top="344" Canvas.Left="144"/>
<TextBox x:Name="divide_txt" Width="96" Canvas.Top="344" Canvas.Left="264" KeyDown="divide_txt_KeyDown" />
public class ItemViewModel : INotifyPropertyChanged
{
public ItemViewModel()
{
}
private void divide_txt_KeyDown(object sender, KeyEventArgs e)
{
calculation();
}
public void calculation() {
}
private void divide_txt_KeyDown(object sender, KeyEventArgs e)
{
add_txt.Text = a1.Text + a2.Text;
double v1 = Convert.ToDouble(a1.Text);
double v2 = Convert.ToDouble(a2.Text);
add_txt.Text = (v1 + v2).ToString();
multiple_lbl.Content = (v1 * v2).ToString();
divide_txt.Text = (v1 / v2).ToString();
}
}
答案 0 :(得分:2)
如果您尝试访问视图模型中的控件属性,则完全误解了MVVM设计模式的全部内容。然后你可以摆脱你的ItemViewModel
类,并将所有代码放在视图的代码隐藏中。
视图模型不应该对控件有任何了解。您应该做的是将视图中Text
的{{1}}属性绑定到视图模型中的TextBoxes
属性,并在视图模型类中设置这些源属性:
string
确保视图模型类正确实现<TextBox Binding="{Binding A1}" />
<TextBox Binding="{Binding A2}" />
<TextBox Binding="{Binding Add}" />
接口:https://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx
应使用命令处理INotifyPropertyChanged
事件。有关此内容的更多信息,请参阅以下链接。
处理MVVM WPF应用程序中的事件: https://blog.magnusmontin.net/2013/06/30/handling-events-in-an-mvvm-wpf-application/