【发布时间】:2015-07-31 09:54:18
【问题描述】:
我有统一的网格,带有按钮和标签。每个按钮都有独特的内容,单击位于框中的按钮后,我想更改此框中的标签。但是我如何才能确定单击了哪个框按钮以及需要更改哪个标签?
namespace WpfApplication107
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new Shop();
}
}
public class StructOfBox
{
public string Size { get; set; }
public string Amount { get; set; }
public ICommand ChangeSize { get; set; }
}
public class Shop
{
public Shop()
{
Items = new ObservableCollection<StructOfBox>();
Items.Add(new StructOfBox { Amount = "0", Size = "S", ChangeSize = new RelayCommand(() => ChangeAmount()) });
Items.Add(new StructOfBox { Amount = "0", Size = "M", ChangeSize = new RelayCommand(() => ChangeAmount()) });
Items.Add(new StructOfBox { Amount = "0", Size = "L", ChangeSize = new RelayCommand(() => ChangeAmount()) });
Items.Add(new StructOfBox { Amount = "0", Size = "XL", ChangeSize = new RelayCommand(() => ChangeAmount()) });
}
public ObservableCollection<StructOfBox> Items { get; set; }
public void ChangeAmount()
{
// what box?
Debug.WriteLine("pressed");
}
}
}
Xaml:
<Grid>
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2" Rows="2"></UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderThickness="2" BorderBrush="Green">
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Button Content="{Binding Size}" Command="{Binding ChangeSize}"></Button>
<Label Content="{Binding Amount}" Height="25" Grid.Row="2"></Label>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
【问题讨论】:
-
请同时显示 xaml 文件
-
只需更改
ChangeSize命令执行处理程序中的Amount属性。请注意,您的 StructOfBox 类需要实现 INotifyPropertyChanged 接口来更新 UI。 -
您可以将标签绑定/设置到按钮的标签。按下按钮时,您只需要将事件对象 (o) 转换为按钮,然后将其标签转换为标签。
-
@SteffenWinkler 为什么他们应该在已经有一个带有命令的视图模型时这样做?您的建议需要将 Click 处理程序添加到已经具有命令绑定的 Button。
-
@Clemens 抱歉,但我以前从未使用过命令。已经想知道 Click 事件处理程序在哪里。