WPF+MVVM+ReactiveUI:ComboBox项Disabled时文本置灰问题求助
问题:ComboBox绑定对象列表后,Disabled为True的项未显示灰色
我将对象列表绑定到ComboBox,希望当对象的Disabled属性设为true时,对应ComboBox项的文本颜色变为灰色,但始终没能实现效果。以下是我的实现代码:
ComboBox项数据类型
public class ListItem { public ListItem(string text) { Text = text; } public string Text { get; set; } public bool Disabled { get; set; } }
ViewModel配置
public class MainPageViewModel : ReactiveObject { // ReactiveUI中,这种语法用于声明可读写属性, // 能通知观察者和WPF属性已变更。如果用普通属性,无法感知变更! private ListItem _selectedItem; public ListItem SelectedItem { get => _selectedItem; set => this.RaiseAndSetIfChanged(ref _selectedItem, value); } public List<ListItem> Items { get; set; } public MainPageViewModel() { Items = new List<ListItem> { new ListItem ("A Cat"), new ListItem ("A Dog"), new ListItem ("A Mouse"), new ListItem ("A Frog") { Disabled = true } }; } }
ReactiveUI绑定代码
public MainPage() { InitializeComponent(); ViewModel = new MainPageViewModel(); this.WhenActivated(d => { this.OneWayBind(ViewModel, vm => vm.Items, v => v.MyComboBox.ItemsSource) .DisposeWith(d); this.Bind(ViewModel, vm => vm.SelectedItem, v => v.MyComboBox.SelectedItem) .DisposeWith(d); }); }
XAML标记
<ComboBox Name="MyComboBox" Margin="0,0,0,20" Foreground="black"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </ComboBox.ItemTemplate> <ComboBox.ItemContainerStyle> <Style TargetType="ComboBoxItem"> <Style.Triggers> <DataTrigger Binding="{Binding Path=Disabled}" Value="True"> <Setter Property="Foreground" Value="Gray" /> </DataTrigger> </Style.Triggers> </Style> </ComboBox.ItemContainerStyle> </ComboBox>
解决方案
实际代码中的Disabled属性是只读的,这影响了WPF绑定。将其改为可读写的公共属性后,项未变灰的问题就解决了。长时间盯着问题容易忽略细节,答案其实很简单。至于选中项的置灰问题,我会自行尝试解决。
内容的提问来源于stack exchange,提问作者ree6
相关产品推荐
相关产品推荐

