我正在使用MVVM模式创建一个WPF应用程序(至少我正在尝试)。有<TabControl>和绑定ItemsSource,这是一个ObservableCollection<TabModel> Tabs。Tabs具有Name和Items属性,其中项是ControlModel的列表,这意味着控件。将IsEnabled属性绑定到放置Items的Grid有问题。
下面是我的代码的一部分,展示了我这样做的方式:
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}">
不起作用。没有错误。这个网格总是被禁用的。默认情况下是假的。
private bool isProductEditionEnabled = false;
public bool IsProductEditionEnabled
{
get { return isProductEditionEnabled; }
set
{
isProductEditionEnabled = value;
OnPropertyChanged("IsProductEditionEnabled");
}
}问题是:在我的情况下如何正确地绑定IsEnabled?
发布于 2018-10-17 08:25:47
您在DataTemplate中,所以您需要在执行绑定时指定父DataContext在哪里,如下所示:
<DataTemplate>
<ScrollViewer VerticalScrollBarVisibility="Hidden">
<Grid IsEnabled="{Binding Path=DataContext.IsProductEditionEnabled,
RelativeSource={RelativeSource AncestorType={x:Type TabControl}}}">
</Grid>
</ScrollViewer>
</DataTemplate>https://stackoverflow.com/questions/52849695
复制相似问题