我要做的是, 我有一个名为Ferramenta的班级应该有一个Atividades类型列表,所以我可以继续将Atividades添加到给定的Ferramenta。 但我遇到麻烦,因为我可以添加一个Atividade就好了,但如果我去更改任何TextBox输入它会自动更改Atividades列表中的atividade,这是没有意义的,因为它应该是一个完全不同的范围。
我可以看到它改变了我输入的那个,因为我有一个显示内容的DataGrid。
XAML:
<TextBox Margin="{StaticResource ControlMargin}"
Style="{DynamicResource MetroButtonTextBox}"
Text="{Binding Source={StaticResource vm},Path=atividade.Responsavel, UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}"
Controls:TextBoxHelper.ClearTextButton="True"
/>
<DatePicker
Controls:TextBoxHelper.Watermark="Selecione uma data"
SelectedDate="{Binding Source={StaticResource vm},Path=atividade.DateInicio,UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}"/>
<DatePicker
Controls:TextBoxHelper.Watermark="Selecione uma data"
SelectedDate="{Binding Source={StaticResource vm},Path=atividade.DateTermino,UpdateSourceTrigger=PropertyChanged,Mode=OneWayToSource}"/>
<Button Width="40"
Height="40"
Margin="20"
Style="{StaticResource AccentCircleButtonStyle}"
Command="{Binding Source={StaticResource vm},Path=addAtividade}"
CommandParameter="{Binding Source={StaticResource vm}, Path=atividade}">
</Button>
视图模型:
public AdicionarAtividade addAtividade { get; set; }
public Atividade atividade { get; set; }
public Ferramenta ferramenta { get; set; }
public ConsultaAtividadesViewModel(){
ferramenta = new Ferramenta()
{
OrdemServico = "12345", //Debugging purposes
SFerramenta = "123456",//Debugging purposes
Peca = "12345",//Debugging purposes
Atividades = new ObservableCollection<Atividade>()
};
addAtividade = new AdicionarAtividade(this);
atividade = new Atividade();
}
Ferramenta上的重要内容
class Ferramenta : INotifyPropertyChanged
{
private ObservableCollection<Atividade> atividades;
public ObservableCollection<Atividade> Atividades
{
get { return atividades; }
set { atividades = value; OnPropertyChanged("Atividades"); } //I think the problem is here on the setter
}
注册命令
ConsultaAtividadesViewModel vm { get; set; } //The View viewModel
public AdicionarAtividade(ConsultaAtividadesViewModel vm)
{
this.vm = vm;
}
//CanExecute stripped out for making it easier to understand
public void Execute(object parameter)
{
vm.ferramenta.Atividades.Add(parameter as Atividade);
}
此外我不知道是否值得添加,但我的想法是,在XAML中,我根据用户输入的内容更改已经设置的Atividade项目然后一旦他按下注册来自ViewModel的Atividade的args传递给命令,然后将命令添加到List中,“打破”绑定。
答案 0 :(得分:0)
必须更改Atividade构造函数以将Atividade作为参数并设置其变量并将执行更改为
vm.ferramenta.Atividades.Add(new Atividade((Atividade)parameter));