C# Xaml产生路径错误,但有些仍然有效
我遇到了一个绑定路径错误的情况。但是,有些绑定仍然可以工作,而有些则不能。我有以下类别(仅复制/粘贴相关位): 代码隐藏:C# Xaml产生路径错误,但有些仍然有效,c#,wpf,xaml,binding,C#,Wpf,Xaml,Binding,我遇到了一个绑定路径错误的情况。但是,有些绑定仍然可以工作,而有些则不能。我有以下类别(仅复制/粘贴相关位): 代码隐藏: class RSSManager : BaseViewModel { #region Resources private Platforms _platformsList; public Platforms PlatformsList { get { return _platformsList; } set
class RSSManager : BaseViewModel
{
#region Resources
private Platforms _platformsList;
public Platforms PlatformsList
{
get { return _platformsList; }
set
{
_platformsList = value;
NotifyPropertyChanged("PlatformsList");
}
}
private List<IActivity> _mainActivitiesList = new List<IActivity>();
public List<IActivity> MainActivitiesList
{
get { return _mainActivitiesList; }
set
{
_mainActivitiesList = value;
NotifyPropertyChanged("MainActivitiesList");
}
}
private ObservableCollection<IActivity> _activitiesList = new ObservableCollection<IActivity>();
public ObservableCollection<IActivity> ActivitiesList
{
get { return _activitiesList; }
set
{
_activitiesList = value;
NotifyPropertyChanged("ActivitiesList");
}
}
private ObservableCollection<IActivity> _alertsList = new ObservableCollection<IActivity>();
public ObservableCollection<IActivity> AlertsList
{
get { return _alertsList; }
set
{
_alertsList = value;
NotifyPropertyChanged("AlertsList");
}
}
private ObservableCollection<IActivity> _invasionsList = new ObservableCollection<IActivity>();
public ObservableCollection<IActivity> InvasionsList
{
get { return _invasionsList; }
set
{
_invasionsList = value;
NotifyPropertyChanged("InvasionsList");
}
}
private ObservableCollection<IActivity> _outbreaksList = new ObservableCollection<IActivity>();
public ObservableCollection<IActivity> OutbreaksList
{
get { return _outbreaksList; }
set
{
_outbreaksList = value;
NotifyPropertyChanged("OutbreaksList");
}
}
private ObservableCollection<IActivity> _doneList = new ObservableCollection<IActivity>();
public ObservableCollection<IActivity> DoneList
{
get { return _doneList; }
set
{
_doneList = value;
NotifyPropertyChanged("DoneList");
}
}
#endregion
}
Activities.xaml:
<Page x:Class="Warframe_Activity_Manager.Views.Activities"
DataContext="{Binding Source={RelativeSource Self}}"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="718" d:DesignWidth="1024"
GotFocus="Page_GotFocus"
Title="Activities">
<Grid Name="MainGrid" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Name="PlatformChoices" Orientation="Horizontal" Background="Transparent">
<Label Name="ChoicePCLabel" Content="Show PC Activities" Foreground="Aqua" VerticalAlignment="Center"></Label>
<CheckBox Name="ChoicePC" VerticalAlignment="Center" Click="Platform_Click"/>
<Label Name="ChoicePS4Label" Content="Show PlayStation 4 Activities" Foreground="Aqua" VerticalAlignment="Center"></Label>
<CheckBox Name="ChoicePS4" VerticalAlignment="Center" Click="Platform_Click"/>
<Label Name="ChoiceXB1Label" Content="Show XBox One Activities" Foreground="Aqua" VerticalAlignment="Center"></Label>
<CheckBox Name="ChoiceXB1" VerticalAlignment="Center" Click="Platform_Click"/>
</StackPanel>
<Button Name="Refresh" HorizontalAlignment="Right" Content="Refresh" Click="Refresh_Click"/>
<TabControl Name="Tabs" Grid.Row="1" Background="Transparent">
<TabItem Name="TabAll" Header="All Activities" BorderThickness="0">
<ListView Name="ListAll" Background="Transparent" ItemsSource="{Binding ActivitiesList}" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<StackPanel Name="ActivityTypeContainer" Orientation="Horizontal" HorizontalAlignment="Left">
<Label Name="ActivityTypeLabel" VerticalAlignment="Center" Foreground="Red" Content="Activity Type :"/>
<Label Name="ActivityType" VerticalAlignment="Center" Foreground="Red" Content="{Binding Path=Type}"/>
</StackPanel>
<StackPanel Name="ActivityPlatformContainer" Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0, 0, 10, 0">
<Label Name="ActivityPlatformLabel" VerticalAlignment="Center" Foreground="Blue" Content="Platform :"/>
<Label Name="ActivityPlatform" VerticalAlignment="Center" Foreground="Blue" Content="{Binding Path=Platform}"/>
</StackPanel>
<StackPanel Name="ActivityInfoContainer" Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Left">
<Label Name="ActivityInfoLabel" VerticalAlignment="Center" Foreground="Orange" Content="Activity Information : "/>
<Label Name="ActivityInfo" VerticalAlignment="Center" Foreground="Orange" Content="{Binding Path=Info}"/>
</StackPanel>
<StackPanel Name="ActivityDoneContainer" Grid.Column="1" Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0, 0, 10, 0">
<Label Name="ActivityDoneLabel" VerticalAlignment="Center" Foreground="Green" Content="Finished : "/>
<CheckBox Name="ActivityDone" VerticalAlignment="Center" IsChecked="{Binding Path=Done, Mode=TwoWay}" Click="ActvityDone_Click"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</TabItem>
</TabControl>
</Grid>
错误:
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“相对资源”(HashCode=16143157)“上未找到“活动列表”属性。BindingExpression:Path=ActivitiesList;DataItem='RelativeSource'(HashCode=16143157);目标元素是'ListView'(Name='ListAll');目标属性为“ItemsSource”(类型为“IEnumerable”)
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“相对资源”(HashCode=16143157)“上未找到“AlertsList”属性。BindingExpression:Path=AlertsList;DataItem='RelativeSource'(HashCode=16143157);目标元素是“ListView”(Name='ListAlerts');目标属性为“ItemsSource”(类型为“IEnumerable”)
System.Windows.Data错误:40:BindingExpression路径错误:“在“对象”“相对资源”(HashCode=16143157)“上找不到InvasionsList”属性。BindingExpression:Path=InvasionsList;DataItem='RelativeSource'(HashCode=16143157);目标元素是“ListView”(Name='ListInvisions');目标属性为“ItemsSource”(类型为“IEnumerable”)
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“相对资源”(HashCode=16143157)“上找不到OutbreaksList”属性。BindingExpression:Path=OutbreaksList;DataItem='RelativeSource'(HashCode=16143157);目标元素是'ListView'(Name='ListView');目标属性为“ItemsSource”(类型为“IEnumerable”)
System.Windows.Data错误:40:BindingExpression路径错误:在“对象”“相对资源”(HashCode=16143157)“上找不到DoneList”属性。BindingExpression:Path=DoneList;DataItem='RelativeSource'(HashCode=16143157);目标元素是'ListView'(Name='ListDone');目标属性为“ItemsSource”(类型为“IEnumerable”)
我还没有谈到分解模板的部分,但我认为这不是问题所在
如上所述,即使我得到了错误,程序也显示了我想要的东西。但是,我接下来添加的绑定在输出给出相同错误类型(错误路径)的情况下根本不起作用。我做错了什么?您正在XAML和构造函数中设置DataContext 删除XAML中的DataContext行,因为这会导致输出中出现错误:
DataContext="{Binding Source={RelativeSource Self}}"
在绑定失败的情况下,应用程序不会引发任何错误并停止应用程序,但会在输出中显示这些错误
我发现在运行应用程序之前查看任何绑定错误的一个好方法是检查intellisense是否正常工作。如果是这样的话,那么您就可以开始了。您正在XAML中设置DataContext,并且在后端代码的构造函数中也设置DataContext。我想这就是你的错误所在。删除XAML中的DataContext行,这应该可以帮到你了。这非常有效(尽管我确实想知道为什么它仍然有效)。我想验证你的答案,你能把它作为答案而不是评论吗?没问题。绑定有时是调试的难点。:-)顺便问一下,我如何检查intellisense是否正常工作?在XAML中键入绑定时,对象中的属性应该在intellisense列表中。嗯,这很奇怪,因为即使是现在,我也无法在列表中找到对象的属性。除非您正在谈论WPF对象中的“绑定”、“路径”、“模式”和所有其他内容。
DataContext="{Binding Source={RelativeSource Self}}"