我希望能够通过使用枚举从 XAML 中的 ObservableCollection 访问项目。
我可以绑定到 ObservableCollection 并通过以下方式指定 XAML 中的哪个项目:
<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>
虽然视图模型看起来像这样
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;
}
}
我希望能够这样编写 XAML:
<CheckBox Content="First" IsChecked="{Binding FilterBy[Filters.First],Mode=TwoWay}"/>
任何指针或想法将不胜感激。