Я пытаюсь обновить фон элемента Listbox независимо, используя следующую команду: Модель
public class Item
{
public Item()
{
this.BackColor = new SolidColorBrush(Colors.WhiteSmoke);
}
public int Number { get; set; }
public int Duration { get; set; }
public string Name { get { return Number.ToString(); } }
public SolidColorBrush BackColor { get; set; }
}
ViewModel
private ObservableCollection<Item> _items;
public ObservableCollection<Item> Items
{
get { return _items; }
set { OnPropertyChange(ref _items, value); }
}
Кнопочная команда
public ICommand StartCommand { get; set; }
public void start()
{
foreach (var item in Items
{
item.BackColor = new SolidColorBrush(Colors.LightGreen);
// Do some work .....
}
}
КТОР
public MainViewModel()
{
StartCommand = new RelayCommand(start);
LoadItems();
}
Xaml
<ListBox ItemsSource="{Binding Items}" >
<ListBox.ItemTemplate>
<DataTemplate>
<Border
Height="50"
BorderThickness="1"
BorderBrush="Silver"
CornerRadius="5"
Margin="10,10,10,5"
Background="{Binding BackColor,
UpdateSourceTrigger=PropertyChanged}">
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Я могу обновить наблюдаемые данные коллекции, удалить элементы, но не изменить фон элемента. Пожалуйста, помогите.
«Обновление»: как видите, я не хочу менять цвет всего списка, поэтому я не могу привязываться к общему свойству, например «ItemBackground», вместо этого я должен привязываться к свойству объекта коллекции «BackColor».
INotifyPropertyChanged
в вашем классеItem
. - person Fruchtzwerg   schedule 12.11.2017INotifyPropertyChanged
. Однако, поскольку вы используете mvvm, вам следует пересмотреть возможность сохранения фона какBrush
внутри вашей модели. В mvvm модель ничего не должна знать о представлении, аBrush
во многом является частью представления. Попробуйте вместо этого сохранить некоторое состояние и использовать конвертер, чтобы изменить его на фон. - person CKII   schedule 12.11.2017UpdateSourceTrigger=PropertyChanged
в фоновой привязке бессмысленна. Он действует только в привязках TwoWay или OneWayToSource. Также обратите внимание, что вместоnew SolidColorBrush(Colors.LightGreen)
вы могли бы также написатьBrushes.LightGreen
. - person Clemens   schedule 12.11.2017