CaliburnMicro - 将项目列表绑定到ListBox

时间:2017-02-27 17:48:16

标签: c# wpf mvvm listbox caliburn.micro

我需要创建一个与name,boolean state和color指定的项绑定的列表。

这是我的ViewModel:

using Caliburn.Micro;

public class MainWindowViewModel :Screen
{
    private List<string> _commandListSource;
    private List<CommandItem> _commandsSource;

    public List<CommandItem> CommandsSource
    {
        get
        {
            return _commandsSource;
        }

        set
        {
            _commandsSource = value;
            NotifyOfPropertyChange(() => CommandsSource);
        }
    }

    public MainWindowViewModel()
    {
        _commandListSource = new List<string>();
        _commandListSource.Add("A");
        _commandListSource.Add("B");

        getsource();

        NotifyOfPropertyChange(() => CommandsSource);
    }
    private void getsource()
    {
        _commandsSource = new List<CommandItem>();
        foreach (var x in _commandListSource)
        {
            var ci = new CommandItem();
            ci.CommandName = x;
            ci.IsInTheOtherList = true;
            _commandsSource.Add(ci);
        }
    }
}

CommandItem上课:

public class CommandItem
{
    public string CommandName;
    public bool IsInTheOtherList;
    public Color BGColor
    {
        get
        {
            if (IsInTheOtherList)
                return Color.FromRgb(0, 0,255);
            return Color.FromRgb(255, 255,0);

        }
    }
}

Xaml ListBox

<ListBox x:Name="Source" 
         ItemsSource="{Binding CommandsSource , NotifyOnSourceUpdated=True}" 
         HorizontalAlignment="Left"           
         ScrollViewer.VerticalScrollBarVisibility="Visible"
         VerticalAlignment="Stretch" MinWidth="100">
  <ListBox.ItemTemplate>
     <DataTemplate>
        <DockPanel >
           <TextBlock Text="*"/>
           <Ellipse Fill="{Binding BGColor}" Width="10" Height="10"/>
           <TextBlock Text="{Binding CommandName}"/>
        </DockPanel>
     </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

问题是ListBox仅显示*个字符

1 个答案:

答案 0 :(得分:1)

我通过更改CommandItem类:

解决了这个问题
public class CommandItemClass : PropertyChangedBase
{
    private string _commandName;
    private bool _isInTheOtherList;
    public SolidColorBrush BGColor
    {
        get
        {
            if (IsInTheOtherList)
                return new SolidColorBrush(Color.FromRgb(0, 0, 255));
            return new SolidColorBrush(Color.FromRgb(255, 255, 0));
        }
    }

    public string CommandName
    {
        get
        {
            return _commandName;
        }
        set
        {
            _commandName = value;
            NotifyOfPropertyChange(()=>CommandName);
        }
    }

    public bool IsInTheOtherList
    {
        get
        {
            return _isInTheOtherList;
        }
        set
        {
            _isInTheOtherList = value;
            NotifyOfPropertyChange(() => IsInTheOtherList);
            NotifyOfPropertyChange(()=>BGColor);
        }
    }
}