WPF Привязка к коллекции ObserVableCollection, найденной в словаре - PullRequest
0 голосов
/ 26 февраля 2020

Hy Everyone!

Моя ситуация пока:

  • У меня есть наблюдаемая коллекция ("PipesSystemList"), которая состоит из объектов "DataBaseSystem":
public static ObservableCollection<DatabaseSystem> PipesSystemList { get; set; } = new ObservableCollection<DatabaseSystem>();
public class DatabaseSystem
{
    public string System { get; set; }

    public bool IsChecked { get;set;}

}    
  • Я успешно связал эту коллекцию со своим списком, как следует, и все отлично работает:
<ComboBox ItemsSource="{Binding ElementName=MainView,Path=DataContext.PipesSystemList}" 
          Padding="2" Margin="5 0 5 0" Width="70" Height="20" 
          Foreground ="#F1F1F1" Style="{StaticResource ComboBoxStyleDark}">
    <ComboBox.ItemTemplate>
        <DataTemplate DataType="local:DatabaseSystem">
            <StackPanel Orientation="Horizontal">
                <CheckBox Content="{Binding System}" Foreground="#F1F1F1" 
                          IsChecked="{Binding IsChecked}" 
                          Command="{Binding ElementName=MainView, Path=DataContext.PipeTabChosenSystemChangedCommand }"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

Чего я хотел достичь: потому что я иметь несколько типов оборудования, я хотел, чтобы все необходимые коллекции были в одном месте. поэтому я создал словарь:

var SystemTabLists = new Dictionary<string, ObservableCollection<DatabaseSystem>>()
{
    {"Document List",new ObservableCollection<DatabaseSystem>()},
    {"Pipes",new ObservableCollection<DatabaseSystem>()},
    {"Valves",new ObservableCollection<DatabaseSystem>()},
    {"Sensors",new ObservableCollection<DatabaseSystem>()},
    {"Vessels",new ObservableCollection<DatabaseSystem>()},
    {"Heat Exchangers",new ObservableCollection<DatabaseSystem>()},
    {"Filters",new ObservableCollection<DatabaseSystem>()},
    {"Other Equipment",new ObservableCollection<DatabaseSystem>()}
};

После этого я попытался привязать комбинированный список к коллекции, принадлежащей Pipes (мне удалось заполнить коллекцию нужными элементами, поэтому мне нужны данные есть):

<ComboBox ItemsSource="{Binding ElementName=MainView,Path=DataContext.SystemTabLists[Pipes]}" 
          Padding="2" Margin="5 0 5 0" Width="70" Height="20" 
          Foreground ="#F1F1F1" Style="{StaticResource ComboBoxStyleDark}">
    <ComboBox.ItemTemplate>
        <DataTemplate DataType="local:DatabaseSystem">
            <StackPanel Orientation="Horizontal">
                <CheckBox Content="{Binding System}" Foreground="#F1F1F1" 
                          IsChecked="{Binding IsChecked}" 
                          Command="{Binding ElementName=MainView, Path=DataContext.PipeTabChosenSystemChangedCommand }"/>
            </StackPanel>
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

К сожалению, это не работает. Когда я отлаживаю код и включаю трассировку для привязок, я получаю следующее: « BindingExpression не может получить значение из-за недостающей информации. BindingExpression: Path = DataContext.SystemTabLists [Pipes] »

Возможно кто-нибудь, помогите мне, что я делаю не так? Или укажите, если это невозможно.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...