私はwpfでこのようなものを作りたくない
だから私はこのxamlを試します:
<StackPanel HorizontalAlignment="Left">
<ListView ItemsSource="{Binding Path=StateItems}">
<ListView.ItemTemplate>
<DataTemplate DataType="vm:StateItem">
<StackPanel Orientation="Horizontal">
<Image>
<Image.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Active}" Value="True">
<Setter Property="Image.Source" Value="{StaticResource Ellipse}" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=Active}" Value="False">
<Setter Property="Image.Source" Value="{StaticResource EllipseEmpty}" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
そして、これはviewModelで:
public List<StateItem> StateItems
{
get
{
var items = new StateItem[m_InstallationSteps.Steps.Count];
items[m_InstallationSteps.ActiveStepIndex].Active = true;
return items.ToList();
}
}
public class StateItem
{
public bool Active { get; set; }
}
しかし、それは表示されません。出現させる方法は?
編集:バインディングが機能しないようです
EDIT2:通知で変更しようとしましたが、役に立ちませんでした
public class StateItem : INotifyPropertyChanged
{
private bool m_Active;
public bool Active
{
get { return m_Active; }
set
{
m_Active = value;
OnPropertyChanged("Active");
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}