gpt4 book ai didi

c# - 找不到绑定(bind)源

转载 作者:IT王子 更新时间:2023-10-29 04:34:54 26 4
gpt4 key购买 nike

当我添加一个新选项卡然后将其删除时,我的应用程序会抛出此错误消息:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.TabControl', AncestorLevel='1''. BindingExpression:Path=TabStripPlacement; DataItem=null; target element is 'TabItem' (Name=''); target property is 'NoTarget' (type 'Object')

如果我添加一个新标签,切换到另一个标签,切换回来,然后删除它,它没有提示。似乎在切换期间“更新”了某些内容,但我无法弄清楚是什么以及如何修复它们。

这是我的 xaml 文件:

<Window x:Class="MyHomework__MVVM_.MyHomeworkView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="My Homework" Height="450" Width="800" ResizeMode="CanMinimize">
<Grid Margin="0,0,10,10">
<TabControl HorizontalAlignment="Left" Height="330" VerticalAlignment="Top" Width="764" Margin="10,10,0,0" ItemsSource="{Binding AllTabs}" SelectedItem="{Binding SelectedTab}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Header" Value="{Binding Header}"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid>
<TextBox Text="{Binding Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontSize="16" AcceptsReturn="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TextChanged="OnTextChanged">
</TextBox>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="FontSize" Value="20"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
<Button Content="Add Course" HorizontalAlignment="Left" VerticalAlignment="Top" Width="105" Margin="10,351,0,0" Height="50" Command="{Binding AddCourseCommand}"/>
<Button Content="Drop Course" HorizontalAlignment="Left" VerticalAlignment="Top" Width="76" Margin="126,379,0,0" Height="22" Command="{Binding DropCourseCommand, UpdateSourceTrigger=PropertyChanged}"/>
<Button Content="Save HW" HorizontalAlignment="Left" VerticalAlignment="Top" Width="105" Margin="669,351,0,0" Height="50" Command="{Binding SaveHomeworkCommand, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>

这是我添加/删除标签的代码:

public void AddNewTab()
{
NewCourseName ncn = new NewCourseName();
ncn.Owner = mainWindow;
ncn.ShowDialog();
if (ncn.courseName != null)
{
MyHomeworkModel newTab = new MyHomeworkModel();
newTab.Header = ncn.courseName;
newTab.Text = "";
AllTabs.Add(newTab);
SelectedTab = newTab;
}
}

public void RemoveTab()
{
DropCourseConfirmation dcc = new DropCourseConfirmation();
dcc.Owner = mainWindow;
dcc.ShowDialog();
if (dcc.drop == true)
{
int index = AllTabs.IndexOf(SelectedTab);
AllTabs.Remove(SelectedTab);

if (AllTabs.Count > 0)
{
if (index == 0)
{
SelectedTab = AllTabs[0];
}
else
{
SelectedTab = AllTabs[--index];
}
}
else
{
SelectedTab = null;
}
}
}

如果您需要查看更多代码,请告诉我。提前致谢。

最佳答案

作为Zarat提到 Windows 8 中 TabItem 的默认样式具有在删除后触发的触发器,然后查找现在丢失的 TabControl。我认为这是一个错误,因为添加和删除 TabItems 是一个非常常见的场景,不是吗?

我发现作为解决方法,可以删除 TabItem 的模板:

foreach (var item in TabControl.Items)
{
var tabitem = item as TabItem;
// if this is the item to remove
tabitem.Template = null;
TabControl.Items.Remove(item);
}

在我的场景中这看起来没问题,因为我将不再使用 TabItem。

我也尝试过清除模板的触发器集合或清除其触发器的条件集合,但不允许这样做(错误)。
此外,似乎没有办法禁用触发器。

关于c# - 找不到绑定(bind)源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14419248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com