我有Button
个<ListView ItemsSource="{Binding NumberOfItems}" SelectedItem="{Binding SelectedItem}">
<ListViewItem >
<Button Name="test" Grid.Row="0" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="4" VerticalAlignment="Center" Background="Transparent" Command="{Binding DataContext.TestCommand, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}">
<Button.Template>
<ControlTemplate>
<Grid RenderTransformOrigin="0.5,0.5" x:Name="bg">
<Image Source="{Binding DataContext.Test_ImagePath, RelativeSource={RelativeSource FindAncestor, AncestorType=ListView}}"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
</ListViewItem >
</ListView>
元素,如下所示:
CommandTarget
我的目标是让按钮的图像在按钮点击时在两个图像路径之间切换。它可以工作,但问题是列表中的所有按钮都会在某些按钮单击时更改图像路径。我只想点击一个来改变图像路径。我尝试使用CommandTarget="{Binding DataContext.Listview.SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType=ListViewItem}}
这样的属性:
xls.Range("A7").Offset(1).EntireRow.Insert
但它没有成功。
提一下我使用MVVM。
如何解决这个问题?
答案 0 :(得分:3)
如果您正在使用MVVM,我想您可以使用这样的包装器包装您的模型(如您所说,现在为整数):
public class ToggleableWrapper<T> : INotifyPropertyChanged {
private bool toggled;
public ToggleableWrapper(T item){
this.Item = item;
this.ClickCommand = new RelayCommand(() => this.Toggled = !this.Toggled);
}
public T Item {get;}
public ICommand ClickCommand {get;}
public bool Toggled {
get { return this.toggled; }
set {
this.toggled = value;
OnPropertyChanged(nameof(this.Toggled));
}
}
//Property changed implementation...
}
因此,您的NumberOfItems
集合可能如下所示:
public ObservableCollection<ToggleableWrapper<int>> NumberOfItems {get;}
现在您需要一个ValueConverter,它将切换的布尔值转换为您的图像。称之为ToggledToImageConverter
您可以相应地实现它并使其成为某个地方的资源。
现在你的ListView看起来像这样:
<ListView ItemsSource="{Binding NumberOfItems}" SelectedItem="{Binding SelectedItem}">
<ListView.ItemTemplate>
<DataTemplate>
<Button Name="test" Grid.Row="0" Grid.Column="10" Grid.ColumnSpan="4" Grid.RowSpan="4" VerticalAlignment="Center" Background="Transparent" Command="{Binding ClickCommand}">
<Button.Template>
<ControlTemplate>
<Grid RenderTransformOrigin="0.5,0.5" x:Name="bg">
<Image Source="{Binding Toggled, Converter={StaticResouce ToggledToImageConverter}"/>
</Grid>
</ControlTemplate>
</Button.Template>
</Button>
<DataTemplate>
</ListView.ItemTemplate>
</ListView>
因此,当您单击该按钮时,将切换bool,然后使用ValueConverter切换图像。