我需要创建一个与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
仅显示*
个字符
答案 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);
}
}
}