Resharper 突出显示在数据上下文数据模板中找不到的属性
Resharper highlights the properties not found in data context data template
我这里有个小问题。我在 xaml 的顶部声明了我的数据模板,并在列表框项目模板中链接到它。 XAML
<DataTemplate x:Key="listTemplate">
<!--In case we need a click add button -->
<DockPanel HorizontalAlignment="Left" Height="92" LastChildFill="False" Margin="17,10,0,0" VerticalAlignment="Top" Width="615" Background="Green" >
<Border BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8" Margin="10,0,614,475"/>
<TextBlock Margin="10,42,10,29" Width="70"> Приміщення</TextBlock>
<TextBlock Margin="10,42,10,29" Width="75"> №</TextBlock>
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
<TextBlock Margin="10,42,10,29" Width="91"> Гамма</TextBlock>
<TextBlock Margin="10,42,10,29" Width="91" Text="{Binding MonitorGammaCh}"></TextBlock>
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
<TextBlock Margin="10,42,10,29" Width="91"> Нейтрон</TextBlock>
<TextBlock Margin="10,42,10,29" Width="72" Text="{Binding MonitorNeutronCh}"></TextBlock>
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
</DockPanel>
<!--</StackPanel>-->
</DataTemplate>
<TabItem x:Name="MonitorsTab" Background="#617891" >
<TabItem.Header>
<Image Width="100" Height="100" Source="../Resources/radioactive 256X256.png" />
</TabItem.Header>
<ListBox x:Name="MonitorsList" ItemTemplate="{StaticResource listTemplate}">
</ListBox>
</TabItem>
在我后面的代码中有
MonitorsTab.DataContext = mainWindowViewModel.MonitorsTabViewModel;
MonitorsViewModels = new ObservableCollection<MonitorViewModel>
{
new MonitorViewModel { MonitorGammaCh = "gamma1", MonitorNeutronCh = "neutron2" } ,
new MonitorViewModel { MonitorGammaCh = "gamma1", MonitorNeutronCh = "neutron2" },
//new MonitorViewModel { MonitorGammaCh = "gamma1", MonitorNeutronCh = "neutron2"}
};
MonitorsList.ItemsSource = MonitorsViewModels;
我得到的结果是这样的。没有 gamma1 和 neutron2 文本可见
我想知道为什么Resharper找不到上下文
ReSharper 不会从代码隐藏中推断出 DataContext。您需要在 XAML 中使用 d:DataContext
属性显式设置设计时 DataContext,如下所示:
<Window x:Class="WpfApplication1.MainWindowView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wpfApplication1="clr-namespace:WpfApplication1"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance wpfApplication1:MainWindowViewModel}">
</Window>
设置后,ReSharper 将解析任何与 DataContext 相关的符号,并为您提供 IntelliSense、导航和其他功能。
我这里有个小问题。我在 xaml 的顶部声明了我的数据模板,并在列表框项目模板中链接到它。 XAML
<DataTemplate x:Key="listTemplate">
<!--In case we need a click add button -->
<DockPanel HorizontalAlignment="Left" Height="92" LastChildFill="False" Margin="17,10,0,0" VerticalAlignment="Top" Width="615" Background="Green" >
<Border BorderBrush="#FF000000" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8" Margin="10,0,614,475"/>
<TextBlock Margin="10,42,10,29" Width="70"> Приміщення</TextBlock>
<TextBlock Margin="10,42,10,29" Width="75"> №</TextBlock>
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
<TextBlock Margin="10,42,10,29" Width="91"> Гамма</TextBlock>
<TextBlock Margin="10,42,10,29" Width="91" Text="{Binding MonitorGammaCh}"></TextBlock>
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
<TextBlock Margin="10,42,10,29" Width="91"> Нейтрон</TextBlock>
<TextBlock Margin="10,42,10,29" Width="72" Text="{Binding MonitorNeutronCh}"></TextBlock>
<Separator Style="{StaticResource {x:Static ToolBar.SeparatorStyleKey}}" />
</DockPanel>
<!--</StackPanel>-->
</DataTemplate>
<TabItem x:Name="MonitorsTab" Background="#617891" >
<TabItem.Header>
<Image Width="100" Height="100" Source="../Resources/radioactive 256X256.png" />
</TabItem.Header>
<ListBox x:Name="MonitorsList" ItemTemplate="{StaticResource listTemplate}">
</ListBox>
</TabItem>
在我后面的代码中有
MonitorsTab.DataContext = mainWindowViewModel.MonitorsTabViewModel;
MonitorsViewModels = new ObservableCollection<MonitorViewModel>
{
new MonitorViewModel { MonitorGammaCh = "gamma1", MonitorNeutronCh = "neutron2" } ,
new MonitorViewModel { MonitorGammaCh = "gamma1", MonitorNeutronCh = "neutron2" },
//new MonitorViewModel { MonitorGammaCh = "gamma1", MonitorNeutronCh = "neutron2"}
};
MonitorsList.ItemsSource = MonitorsViewModels;
我得到的结果是这样的。没有 gamma1 和 neutron2 文本可见
我想知道为什么Resharper找不到上下文
ReSharper 不会从代码隐藏中推断出 DataContext。您需要在 XAML 中使用 d:DataContext
属性显式设置设计时 DataContext,如下所示:
<Window x:Class="WpfApplication1.MainWindowView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:wpfApplication1="clr-namespace:WpfApplication1"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance wpfApplication1:MainWindowViewModel}">
</Window>
设置后,ReSharper 将解析任何与 DataContext 相关的符号,并为您提供 IntelliSense、导航和其他功能。