WPF将ViewModel作为多参数传递

时间:2013-03-16 03:55:43

标签: wpf data-binding mvvm

我有一个列表视图,列出年份和另一个列表视图,其中包含年份组。 使用第一个列表视图的selectchanged上的ICollectionView过滤器填充年份组列表视图。

我想在组中添加新记录,但是我需要年份列表视图中的selecteditem的ID作为外键。

我在XML中声明了2个静态viewmodel资源。一个列表和一个新的空组。

<local:YearGroupListViewModel x:Key="YearGroupList" />
<local:YearGroupViewModel x:Key="NewYearGroup" />

为了在其他页面上创建新记录,我成功地将新的viewmodel作为参数传递给add命令(年份的例子):

<Button x:Name="btnSettingsYearsSaveAdd" x:Uid="btnSettingsYearsSaveAdd" 
    Content="Submit" Margin="0,49,10,0" 
    Style="{DynamicResource ButtonStyle}"
    DataContext="{StaticResource ResourceKey=YearList}"
    CommandParameter="{StaticResource ResourceKey=NewYear}" 
    Command="{Binding Path=AddCommand}" />

对于没有依赖于父列表视图selectitem id的记录,这适用于外键用途。

所以我尝试使用this question on SO

中提到的多参数传递

我的问题是,如果只发送一个参数,我似乎无法将新的组视图模型作为参数传递。

这就是我现在所处的位置:

XML

<Button x:Name="btnSettingsYearGroupsSaveAdd" x:Uid="btnSettingsYearGroupsSaveAdd"
    Content="Submit" Margin="0,49,10,0" 
    Style="{DynamicResource ButtonStyle}"
    DataContext="{StaticResource ResourceKey=YearGroupList}" 
    Command="{Binding Path=AddCommand}">
        <Button.CommandParameter>
            <MultiBinding Converter="{StaticResource paramConvert}">
                <Binding Path="YearGroup" 
                         ElementName="{StaticResource ResourceKey=NewYearGroup}"/>
                <Binding Path="SelectedItem" 
                         ElementName="lvwSettingsYears"/>
            </MultiBinding>
        </Button.CommandParameter>
    </Button>

静态资源键绑定不起作用。我尝试了十几个不同的衍生品,但都失败了。

命令

public void OnExecute(object parameter)
    {
        var values = (object[])parameter;
        YearGroupViewModel newYearGroup = values[0] as YearGroupViewModel;
        yearID = (Int32)values[1];
    }

以前有人这样做过吗?非常感谢

1 个答案:

答案 0 :(得分:1)

如果您尝试绑定Source,我想它应该是ElementName而不是StaticResource

<Button x:Name="btnSettingsYearGroupsSaveAdd" x:Uid="btnSettingsYearGroupsSaveAdd"
        Content="Submit" Margin="0,49,10,0" 
        Style="{DynamicResource ButtonStyle}"
        DataContext="{StaticResource ResourceKey=YearGroupList}" 
        Command="{Binding Path=AddCommand}">
    <Button.CommandParameter>
        <MultiBinding Converter="{StaticResource paramConvert}">
            <Binding Path="YearGroup" 
                     Source="{StaticResource ResourceKey=NewYearGroup}"/>
            <Binding Path="SelectedItem" 
                     ElementName="lvwSettingsYears"/>
        </MultiBinding>
    </Button.CommandParameter>
</Button>