我对WPF数据绑定有疑问。我想通过将ObservableCollection的值绑定到按钮来更改按钮的背景颜色
我的对象:
public string Position1 { get; set; }
public string Position2 { get; set; }
public string Position3 { get; set; }
public string Position4 { get; set; }
public string Position5 { get; set; }
public string Position6 { get; set; }
public string Position7 { get; set; }
我想将这些位置放在ObservableCollection内,如下所示:
public ObservableCollection<Positions> Positions { get; set; }
public MainWindow()
{
InitializeComponent();
Positions = new ObservableCollection<Positions>();
Positions.Add(new Positions
{
Position1 = "Red",
Position2 = "Red",
Position3 = "Red",
Position4 = "Gray",
Position5 = "Green",
Position6 = "Green",
Position7 = "Green",
});
}
现在我想知道如何将这些值绑定到XAML中的按钮?
我已经尝试过:
<Button
DataContext="Positions[0]"
Grid.Column="0"
Background="{Binding Path=Position1}"
x:Name="R1"
HorizontalAlignment="Left"
Height="100"
Margin="5,0,0,0"
VerticalAlignment="Top"
Width="109"
Click="R1_Click">
<Rectangle Stroke="Black" />
</Button>
我试图设置datacontext,但是我对如何在XAML中获取列表中的值感到非常困惑。有谁知道该怎么做?
答案 0 :(得分:1)
绑定数据上下文似乎是问题所在,因为您将其绑定为字符串,所以无法理解它是视图模型中的一个属性。
将按钮的DataContext更改为“ DataContext =” {绑定位置[0]}“” 然后确定要绑定到背景的属性。
将代码更改为下面的
<Button
DataContext="{Binding Positions[0]}"
Grid.Column="0"
Background="{Binding Path=Position4}"
x:Name="R1"
HorizontalAlignment="Left"
Height="100"
Margin="5,0,0,0"
VerticalAlignment="Top"
Width="109"
Click="R1_Click">
<Rectangle Stroke="Black" />
</Button>
我希望您对窗口的构造函数中的窗口执行viewmodel的DataContext。
希望这会有所帮助,如果还有其他问题,请随时回来:)
答案 1 :(得分:-1)
要生成多个按钮,请使用ItemsControl
,并将ItemsSource绑定到您的位置集合。
要实际设置每个按钮的背景,您需要一个IConverter类来进行此多步转换-首先从string
到Color
(ColorConverter.ConvertFromString()
),然后再到{{ 1}}使用此颜色值。