Привязка TabItem Content IsEnabled - PullRequest
       1

Привязка TabItem Content IsEnabled

0 голосов
/ 17 октября 2018

Я создаю приложение WPF, используя шаблон MVVM (по крайней мере, я пытаюсь).Существует <TabControl> с ограничением ItemsSource, что является ObservableCollection<TabModel> Tabs.Tabs имеет свойство Name и Items, где Items - это список ControlModel, что означает Controls.У меня проблема с привязкой свойства IsEnabled к Grid, где размещены Items.

Ниже приведена часть моего кода, представляющая, как я это делаю:

private ObservableCollection<TabModel> tabs;

public ObservableCollection<TabModel> Tabs
{
    get
    {
        if (tabs == null)
        {
            tabs = new ObservableCollection<TabModel>();
            RefreshTabs();
        }
        return tabs;
    }
    set
    {
        tabs = value;
        OnPropertyChanged("Tabs");
    }
}
\\Tab Model
public string Name { get; set; }

private List<ControlModel> items;

public List<ControlModel> Items
{
    get { return items; }
    set
    {
        items = value;
        OnPropertyChanged("Items");
    }
}

И xaml ...

<TabControl Margin="0,100,0,0" ItemsSource="{Binding Tabs,UpdateSourceTrigger=PropertyChanged}">

<TabControl.ItemTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding Name}"/>
    </DataTemplate>        
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
    <DataTemplate>
        <ScrollViewer VerticalScrollBarVisibility="Hidden">
            <Grid Margin="5,5,5,5" IsEnabled="{Binding IsProductEditionEnabled}">
             <!--<Grid Margin="5,5,5,5">-->
                <ItemsControl ItemsSource="{Binding Items,UpdateSourceTrigger=PropertyChanged}" ItemTemplateSelector="{StaticResource ControlTemplateSelector}"/>
            </Grid>
        </ScrollViewer>
    </DataTemplate>
</TabControl.ContentTemplate>

Часть ... <Grid Margin="5,5,5,5" IsEnabled="{Binding IsProductEditionEnabled}">

не работает.Там нет ошибки.Эта сетка всегда отключена.По умолчанию это false.

private bool isProductEditionEnabled = false;

    public bool IsProductEditionEnabled
    {
        get { return isProductEditionEnabled; }
        set
        {
            isProductEditionEnabled = value;
            OnPropertyChanged("IsProductEditionEnabled");
        }
    }

Вопрос: как правильно связать IsEnabled в моем случае?

1 Ответ

0 голосов
/ 17 октября 2018

Вы находитесь внутри DataTemplate, поэтому вам нужно указать, где находится родительский элемент DataContext, когда вы делаете привязку, что-то вроде этого:

<DataTemplate>
    <ScrollViewer VerticalScrollBarVisibility="Hidden">
        <Grid IsEnabled="{Binding Path=DataContext.IsProductEditionEnabled, 
                RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}">
        </Grid>
    </ScrollViewer>
</DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...