如何访问控件属性?

时间:2017-05-18 09:33:47

标签: c# .net wpf xaml

我有一些文本框。我正在应用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();
    }

}

1 个答案:

答案 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/