I have a listView of items in my app, each item has some configuration and save button.
MainWindow:
<Grid>
<ListView ItemsSource="{Binding ItemVmList}"
SelectedItem="{Binding SelectedItem}"
Padding="0">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type local:ItemViewModel}">
<local:ItemView />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
MainVM:
public class MainViewModel : ViewModelBase
{
private readonly IItemProvider _itemProvider;
private readonly ISettingsManager _settingsManager;
private ItemViewModel _selectedItem;
public ObservableCollection<ItemViewModel> ItemVmList { get; set; }
public ItemViewModel SelectedItem
{
get => _selectedItem;
set
{
_selectedItem = value;
OnPropertyChanged(nameof(SelectedItem));
}
}
public MainViewModel(IItemProvider itemProvider, ISettingsManager settingsManager)
{
_itemProvider = itemProvider;
_settingsManager = settingsManager;
var itemList = _itemProvider.GetItems();
ItemVmList = new ObservableCollection<ItemViewModel>(
itemList.Select(x => new ItemViewModel(settingsManager, x)));
SelectedItem = ItemVmList.First();
}
}
ItemView:
<Grid Height="50"
Width="500">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="400" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name, Mode=OneWay}"
FontSize="18"
Grid.Column="0"
HorizontalAlignment="Center"
Height="50" />
<TextBox Grid.Column="1"
FontSize="18"
Width="50"
Height="50"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Text="{Binding Value, Mode=TwoWay}" />
<Button Width="50"
Height="50"
Grid.Column="2">
Save
</Button>
</Grid>
ItemVM:
public class ItemViewModel : ViewModelBase
{
private readonly ISettingsManager _settingsManager;
private readonly ItemModel _item;
public string Name
{
get { return _item.Name; }
}
public int Value
{
get { return _item.Value; }
set
{
_item.Value = value;
OnPropertyChanged(nameof(Value));
}
}
public ItemViewModel(ISettingsManager settingsManager, ItemModel item)
{
_settingsManager = settingsManager;
_item = item;
}
}
ISettingsManager have here only Save() method.
I want my save button to change button style or play animation based on the result of the Save method (if true – green color and red if false). Also it would be good to move command logic from ItemVM if possible. I tried that with command, but I didn’t find any way to somehow bind button style to Save() result.