是否可以向绑定添加索引?
Is it possible to add an Index to a Binding?
问题:很多按钮 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 等。)
模型视图中的执行方法:
private void ChangeToBlueBackgroundExecute(object parameter)
{
this.ButtonColor = Brushes.Blue;
}
无需太多解决方法,您可以将 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。
问题:很多按钮 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 等。) 模型视图中的执行方法:
private void ChangeToBlueBackgroundExecute(object parameter)
{
this.ButtonColor = Brushes.Blue;
}
无需太多解决方法,您可以将 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。