我想创建一个窗口作为输入表格,以便向某人注册新车(一个人可以拥有多辆车)。从主窗口打开该窗口时,我想自动填充一些输入控件。一个是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原理的情况下将值转移到视图模型?
答案 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]
,数据也将在视图中被修改。