I would like to be able to access an item from an ObservableCollection in XAML by using an enum.
I can bind to the ObservableCollection and specify which item in the XAML in the following way:
<Window x:Class="ArrayPropertyBinding.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:ArrayPropertyBinding"
Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
<local:MyViewModel />
</Window.DataContext>
<StackPanel>
<CheckBox Content="First" IsChecked="{Binding FilterBy[0],Mode=TwoWay}"/>
<CheckBox Content="Second" IsChecked="{Binding FilterBy[1],Mode=TwoWay}"/>
<CheckBox Content="Thrid" IsChecked="{Binding FilterBy[2],Mode=TwoWay}"/>
<CheckBox Content="Fourth" IsChecked="{Binding FilterBy[3],Mode=TwoWay}"/>
<Button Content="Print" Click="Button_Click_1"/>
<Button Content="SetFourthTrue" Click="Button_Click_SetFourthTrue"/>
</StackPanel>
</Window>
While the view model looks like this
public class MyViewModel
{
public enum Filters
{
First = 0,
Second,
Thrid,
Fourth
}
private ObservableCollection<bool> _filterBy = new ObservableCollection<bool>() { false, false, false, false };
public ObservableCollection<bool> FilterBy
{
get { return _filterBy; }
}
public void PrintFilters()
{
System.Diagnostics.Debug.Write("<<<<");
foreach (bool b in _filterBy)
{
System.Diagnostics.Debug.Write(b);
System.Diagnostics.Debug.Write(" ");
}
System.Diagnostics.Debug.WriteLine(">>>>");
}
public void SetFourthTrue()
{
FilterBy[(int)Filters.Fourth] = true;
}
}
I would like to be able to write the XAML as this:
<CheckBox Content="First" IsChecked="{Binding FilterBy[Filters.First],Mode=TwoWay}"/>
Any pointers or ideas would be greatly appreciated.