首页 > 解决方案 > 是否可以将索引添加到绑定?

问题描述

问题:很多按钮 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]}/>

?

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

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

标签: c#xamlmvvmbindingcontrols

解决方案


如果没有太多解决方法,您可以在 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,您必须使用此处找到的解决方法:

<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 路径语法的更多详细信息,请在此处阅读更多信息。


推荐阅读