是否可以向绑定添加索引?

时间:2019-09-16 11:39:13

标签: c# xaml mvvm binding controls

问题:很多按钮40 +

例如。

<Button Background="{Binding ButtonColor1}/>
<Button Background="{Binding ButtonColor2}/>
<Button Background="{Binding ButtonColor...}/>
<Button Background="{Binding ButtonColor40}/>

我想通过CommandBinding更改颜色。 那行得通,但是我不想在ModelView中有40多个方法。

是否有可能将它们编入索引?

<Button Background="{Binding ButtonColor[1]}/>

这样我只需更改一个int值就可以在ViewModel中访问它们。 (我想通过另一个按钮的命令更改颜色。首先是Button1,然后是Button2,等等。) ModelView中的Execute方法:

private void ChangeToBlueBackgroundExecute(object parameter)
{
this.ButtonColor = Brushes.Blue;
}

1 个答案:

答案 0 :(得分:0)

没有太多解决方法,您可以将XAML中的画笔列表定义为StaticResource

<Window.Resources>
    <x:Array Type="{x:Type SolidColorBrush}" x:Key="ButtonColor">
        <SolidColorBrush Color="Red"></SolidColorBrush>
        <SolidColorBrush Color="Blue"></SolidColorBrush>
        <SolidColorBrush Color="Green"></SolidColorBrush>
    </x:Array>
</Window.Resources>
<StackPanel>
    <Button Background="{Binding Source={StaticResource ButtonColor}, Path=[0]}" Content="First Button"/>
    <Button Background="{Binding Source={StaticResource ButtonColor}, Path=[1]}" Content="Second Button"/>
    <Button Background="{Binding Source={StaticResource ButtonColor}, Path=[2]}" Content="Third Button"/>
</StackPanel>

对于DynamicResource,您必须使用找到的here解决方法:

<Window.Resources>
    <x:Array Type="{x:Type SolidColorBrush}" x:Key="ButtonColor">
        <SolidColorBrush Color="Red"></SolidColorBrush>
        <SolidColorBrush Color="Blue"></SolidColorBrush>
        <SolidColorBrush Color="Green"></SolidColorBrush>
    </x:Array>
</Window.Resources>
<StackPanel>
    <Button DataContext="{DynamicResource ButtonColor}" Background="{Binding [0]}" Content="First Button"/>
    <Button DataContext="{DynamicResource ButtonColor}" Background="{Binding [1]}" Content="Second Button"/>
    <Button DataContext="{DynamicResource ButtonColor}" Background="{Binding [2]}" Content="Third Button"/>
</StackPanel>

此方法阻止您像往常一样使用DataContext属性。

现在,如果要使用命令更改背景之一,则命令代码为:

private void ChangeToBlueBackgroundExecute(object parameter) {
    ((SolidColorBrush[])Resources["ButtonColor"])[(int)parameter].Color = Colors.Blue;
}

有关XAML路径语法的更多详细信息,请阅读更多here