以编程方式用绑定填充文本框

时间:2019-04-11 09:03:36

标签: c# wpf mvvm

我想创建一个窗口作为输入表格,以便向某人注册新车(一个人可以拥有多辆车)。从主窗口打开该窗口时,我想自动填充一些输入控件。一个是PersonId,因为创建新的载具需要这样做。为了简化起见,我以AddCarWindow及其视图模型为例,省略了大多数属性。

查看(xaml):

<Window.DataContext>
    <viewModels:AddSalesNotificationViewModel />
</Window.DataContext>

<TextBox
    x:Name="PersonId"
    Text="{Binding PersonId}
    IsReadOnly="True" />

<DatePicker
    x:Name="CarPurchaseDate"
    SelectedDate="{Binding CarPurchaseDate}" />

ViewModel(C#):

private int _personId;
public int PersonId 
{
    get { return _personId; }
    set
    {
        _personId = value;
        NotifyPropertyChanged("PersonId");
    }
}

private DateTime _carPurchaseDate;
public DateTime CarPurchaseDate 
{
    get { return _carPurchaseDate; }
    set
    {
        _carPurchaseDate = value;
        NotifyPropertyChanged("CarPurchaseDate");
    }
}

由于我的主窗口不(也不应该)了解视图模型,因此我想在打开视图之前通过视图/窗口设置PersondId。像这样:

AddCarWindow window = new AddCarWindow();
window.PersonId.Text = SelectedPerson.Id.ToString(); // This does NOT work
window.CarPurchaseDate.SelectedDate = DateTime.Now(); // This works

但是,尽管确实要设置文本框的值,但它不会绑定到视图模型中的基础属性(我猜是因为我将其设置为字符串)。不过,它确实适用于CarPurchaseDate

如何在不违反MVVM原理的情况下将值转移到视图模型?

2 个答案:

答案 0 :(得分:1)

我认为您没有设置datacontext所以

AddCarWindow window = new AddCarWindow();
window.DataContext = new AddCarViewModel 
{
   PersonId = SelectedPerson.Id,
   CarPurchaseDate = DateTime.Now
};
window.ShowDialog();

答案 1 :(得分:0)

您在这里缺少一些MVVM逻辑。如果您将视图属性正确地绑定到viewmodel属性,则不必从视图中设置数据。您只需在视图模型中进行设置,多亏了import pandas as pd import numpy as np dict1={'time_start':[1313575263,1313575263,1313575263,1313579775,1313579775]} dict2={'my_start':[1313575263,1313579775],'value':['foo','bar']} df_new=pd.DataFrame.from_dict(data=dict1) df_information=pd.DataFrame.from_dict(data=dict2) df_new['value']=np.nan for index_new, row_new in df_new.iterrows(): for index_information, row_information in df_information.iterrows(): if row_information['my_start']==row_new['time_start']: df_new['value'][index_new]=df_information['value'][index_information] ,数据也将在视图中被修改。