我正在顯示WPF ListView中的項目列表,項目有一個數量,訂單代碼和一個描述。列被綁定到View Model中保存的ObservableCollection中的字段。這一切都非常標準,並按預期工作。但是,在ListView的Quantity Column中,我添加了兩個按鈕+和 - ,這個想法是,當它們被按下時,數量的值或者遞增或者遞減。問題是,因爲這些按鈕沒有綁定到ObservableCollection中的字段,我無法從列表視圖中的按鈕鏈接到ObservableCollection中的記錄。我已經試過在ListView中選擇的項目,但它是按下時被選中的按鈕而不是ListView項目,當按下按鈕時我也捕獲了鼠標指針下的項目,但可以使用鍵盤按下它。如何捕獲ListView中的按鈕按下
我覺得必須有一個(簡單!)的方式做到這一點,但我找不到它。
這是XAML:
<ListViewName="AccessoriesContent" >
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="Select">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Name="QuantityStack">
<Button Name="SubtractAccessoryButton" Command="vx:DataCommands.SubtractAccessory" Content="-" />
<TextBox Name="QuantityTextBox" Text="{Binding Quantity, Mode=TwoWay}" />
<Button Name="AddAccessoryButton" Command="vx:DataCommands.AddAccessory" Content="+" />
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Order Code" DisplayMemberBinding="{Binding OrderCode}" />
<GridViewColumn Header="Description" DisplayMemberBinding="{Binding Description}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
背後的代碼:
public MainWindow()
{
//CommandBindings.Add(
InitializeComponent();
AccessoryVM = new AccessoryViewModel();
AccessoriesContent.ItemsSource = AccessoryVM.AccessoryCollection;
}
和視圖模型:
class AccessoryViewModel
{
ObservableCollection<AccessoryData> _AccessoryCollection =
new ObservableCollection<AccessoryData>();
public ObservableCollection<AccessoryData> AccessoryCollection
{ get { return _AccessoryCollection; } }
public void PopulateAccessories(string order_code)
{
// Read the data and populate AccessoryCollection
}
}
public class AccessoryData : INotifyPropertyChanged
{
private int _quantity;
public int Quantity
{
get { return _quantity; }
set
{
this._quantity = value;
Notify("Quantity");
}
}
public string OrderCode { get; set; }
public string Description { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
protected void Notify(string propName)
{
if (this.PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
除此之外我有兩個方法SubtractAccessory和AddAccessory被觸發由按鈕,但我還沒有填充他們的任何工作。
謝謝馬克,這正是我正在尋找的東西 - 作品一種享受。 – Marcus 2012-01-10 15:12:54
很高興我能幫到你。在我遇到這種解決方案之前,我在我的同一堵牆上撞了一會兒。如果這對您有用,如果您將此標記爲您接受的解決方案,我將不勝感激。 – 2012-01-10 15:19:56