通过在 WPF 中添加多个设计实例来避免智能感知错误

科斯敏

我正在使用 MVVM 和一些代码,我面临以下 IntelliSense 错误:

在“MainWindow”类型中找不到属性“Date”。

如果我清理,构建/重建,错误会很快消失。一旦我开始编辑它的 XAML 内容,它就会再次出现。解决此问题的一种方法是将我的错误列表设置为内置而不是内置 + 智能感知。

这是我所拥有的:

<Controls:MetroWindow
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wpfTool="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
        xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
        xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        xmlns:local="clr-namespace:T_Tacoma"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:ViewModel="clr-namespace:T_Tacoma.ViewModel" 
        x:Name="Tacoma" 
        x:Class="Tacoma.MainWindow"
        d:DesignHeight="300" 
        d:DataContext="{d:DesignInstance {x:Type local:MainWindow}}" ***<!-- or replace with d:DataContext="{d:DesignInstance ViewModel:TacomaViewModel, IsDesignTimeCreatable=False}"  -->         
        Title="" 
        Height="857" Width="1484.582" 
        WindowState="Maximized"
        SizeToContent="Manual"
        WindowStartupLocation="CenterScreen"
        TitleCaps ="False">
    <Grid>
        <DatePicker x:Name="vDatePick" HorizontalAlignment="Right" SelectedDate="{Binding MDate, Mode=TwoWay}"/>
        <TabControl SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}" VerticalContentAlignment="Stretch">
           <DataGrid
             AutoGenerateColumns="False" 
             VirtualizingPanel.IsVirtualizingWhenGrouping="True" 
             ColumnHeaderStyle="{StaticResource lowCase}" 
             x:Name="dtGrid" ItemsSource="{Binding}" 
             HorizontalContentAlignment="Stretch">
              <DataGrid.Columns>
                  <DataGridTextColumn Binding="{Binding Location}" Header="Location" Visibility="Collapsed"/>
                  <DataGridTextColumn Binding="{Binding Date, StringFormat=MM-dd-yy}" Header="Date"/>
                  <DataGridTextColumn Binding="{Binding RegularHours}" Header="Regular Hours"/>
                  <DataGridTextColumn Binding="{Binding OvertimeHours}" Header="Overtime Hours"/>
              </DataGrid.Columns>
           </DataGrid>
        </TabControl>
    </Grid>  
</Controls:MetroWindow>

代码隐藏:

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using MySql.Data.MySqlClient;
using MySql.Data;
using MahApps.Metro.Controls;
using BespokeFusion;
using Tacoma.ViewModel;

namespace T_Tacoma
{
    public partial class MainWindow : MetroWindow
    {
        public MainWindow()
        {
            InitializeComponent();

            DataContext = new TacomaViewModel();

            string connectionString = "datasource=;port=;username=;password=";
            string sMonth = DateTime.Now.ToString("MM");
            string sYear = DateTime.Now.ToString("yyyy");

            MySqlConnection connection = new MySqlConnection(connectionString);

            MySqlCommand cmd = new MySqlCommand("Select ID, Location, Date, Name, RegularHours, OvertimeHours from Stats.Tacoma where MONTH(Date) = @sMonth AND YEAR(Date) = @sYear", connection);

            try
            {
            connection.Open();
                cmd.Parameters.Add(new MySqlParameter("sMonth", sMonth));
                cmd.Parameters.Add(new MySqlParameter("sYear", sYear));

                DataTable dt = new DataTable();
                dt.Load(cmd.ExecuteReader());
                dtGrid.DataContext = dt;
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }     
            connection.Close();
        }

视图模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using T_Tacoma.Model;
using LiveCharts;
using LiveCharts.Wpf;
using System.Windows;
using Xceed.Wpf;
using T_Tacoma;

namespace Tacoma.ViewModel
{
    public class TacomaViewModel : INotifyPropertyChanged
    {
         public TacomaViewModel()
        {
          Set...();
        }

        private int _selectedTabIndex;
        public int SelectedTabIndex
        {
            get { return _selectedTabIndex; }
            set
            {
                    _selectedTabIndex = value;
                    OnPropertyChanged("SelectedTabIndex");
            }
        }

        public DateTime mDate = DateTime.Now;
        public DateTime MDate
        { 
            get { return mDate; }
            set
            {
                if (value == mDate)
                {
                    return;
                }
                else if (_selectedTabIndex == 0)
                {
                    mDate = value;
                }
                else
                {
                    mDate = value;
                    OnPropertyChanged("MDate");

                    Task.Run(() =>
                   {
                      Set...();
                   });  
                }
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName = null)
        {
            try
            {
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            } 
        }
    }
}

如果我离开d:DataContext="{d:DesignInstance {x:Type local:MainWindow}}",我的 ViewModel 属性会出现错误(MDateSelectedTabIndex)。如果将其替换为d:DataContext="{d:DesignInstance ViewModel:TacomaViewModel, IsDesignTimeCreatable=False}"I 仅在数据网格中绑定的列上得到错误 ( Location, Date, RegularHours, OvertimeHours)

这是我尝试过的,希望它能起作用,但它没有:

<DataGrid d:DataContext="{d:DesignInstance {x:Type local:MainWindow}}"
   AutoGenerateColumns="False" 
   VirtualizingPanel.IsVirtualizingWhenGrouping="True" 
   ColumnHeaderStyle="{StaticResource lowCase}" 
   x:Name="dtGrid" ItemsSource="{Binding}" 
   HorizontalContentAlignment="Stretch">
      <DataGrid.Columns>
          <DataGridTextColumn Binding="{Binding Location}" Header="Location" Visibility="Collapsed"/>
          <DataGridTextColumn Binding="{Binding Date, StringFormat=MM-dd-yy}" Header="Date"/>
          <DataGridTextColumn Binding="{Binding RegularHours}" Header="Regular Hours"/>
          <DataGridTextColumn Binding="{Binding OvertimeHours}" Header="Overtime Hours"/>
      </DataGrid.Columns>
</DataGrid>
<DatePicker d:DataContext="{d:DesignInstance Type=ViewModel:TacomaViewModel}" 
            x:Name="vDatePick" SelectedDate="{Binding MDate, Mode=TwoWay}"/>
<TabControl d:DataContext="{d:DesignInstance Type=ViewModel:TacomaViewModel} 
            SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}" VerticalContentAlignment="Stretch">
</TabControl>

我怎样才能解决这个问题,而不必将所有内容从我的代码隐藏移动到 ViewModel?我知道我可能没有使用最佳实践,但有没有简单的方法来解决这个问题?

科斯敏

在花了一些时间之后,我设法通过执行以下操作来解决它:

  • 将窗口的 DataContext 设置为 ViewModel: d:DataContext="{d:DesignInstance ViewModel:TacomaViewModel, IsDesignTimeCreatable=False}"
  • 将另一个 DataContext 添加到 DataGrid(指向我后面的代码): <DataGrid DataContext="{Binding Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainWindow}}}"...</DataGrid>

我希望它可以帮助其他人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF以编程方式通过DataTrigger添加DataGridTextColumn

来自分类Dev

如何通过代码访问WPF中的元素?

来自分类Dev

如何通过 XAML 在 WPF TabControl 中添加控件

来自分类Dev

通过const引用传递矢量时出现智能感知错误(但项目构建)

来自分类Dev

WPF列表框通过单击空白来删除选择

来自分类Dev

通过对WPF Datagrid的编辑来更新数据库

来自分类Dev

WPF - 如何通过更改按钮的资源来更改按钮颜色

来自分类Dev

WPF通过DependencyProperty向用户控件添加元素

来自分类Dev

WPF通过触发器更改UserControl中的ContentTemplate

来自分类Dev

如何在WPF中通过DynamicResource破坏TextBlock的文本

来自分类Dev

如何在WPF中通过按键中断while循环?

来自分类Dev

通过我的Outlook加载项中的单击按钮打开WPF

来自分类Dev

如何通过WPF中的事件触发嵌套元素动画播放?

来自分类Dev

WPF通过触发器更改UserControl中的ContentTemplate

来自分类Dev

通过脚本确定 WPF 中的哪个控件具有焦点

来自分类Dev

如何通过wpf画布中的坐标获取矩形位置

来自分类Dev

通过CDN进行Bootstrap的Visual Studio智能感知

来自分类Dev

通过CDN进行Bootstrap的Visual Studio智能感知

来自分类Dev

如何通过准确使用调度程序计时器来控制WPF中的帧速率?

来自分类Dev

我必须通过WPF中的接口来实现所有usercontrol属性吗?

来自分类Dev

通过单击 c# 中的按钮在 wpf 应用程序中添加树视图

来自分类Dev

列表理解:通过在单个列表中添加多个值来创建新列表

来自分类Dev

如何通过WPF DataTrigger在多值转换器中传递多个参数

来自分类Dev

WPF通过双向绑定从ViewModel中选择DataGrid中的多个项目

来自分类Dev

如何通过与数据库的绑定将选项“全部”添加到WPF中的组合框

来自分类Dev

如何通过与数据库的绑定将选项“全部”添加到WPF中的组合框

来自分类Dev

WPF名称空间无法与智能感知一起使用

来自分类Dev

如何通过在WPF中进行绑定来设置复选框内容的背景色

来自分类Dev

WPF:如何通过设置动态创建的按钮的标签来调用方法

Related 相关文章

  1. 1

    WPF以编程方式通过DataTrigger添加DataGridTextColumn

  2. 2

    如何通过代码访问WPF中的元素?

  3. 3

    如何通过 XAML 在 WPF TabControl 中添加控件

  4. 4

    通过const引用传递矢量时出现智能感知错误(但项目构建)

  5. 5

    WPF列表框通过单击空白来删除选择

  6. 6

    通过对WPF Datagrid的编辑来更新数据库

  7. 7

    WPF - 如何通过更改按钮的资源来更改按钮颜色

  8. 8

    WPF通过DependencyProperty向用户控件添加元素

  9. 9

    WPF通过触发器更改UserControl中的ContentTemplate

  10. 10

    如何在WPF中通过DynamicResource破坏TextBlock的文本

  11. 11

    如何在WPF中通过按键中断while循环?

  12. 12

    通过我的Outlook加载项中的单击按钮打开WPF

  13. 13

    如何通过WPF中的事件触发嵌套元素动画播放?

  14. 14

    WPF通过触发器更改UserControl中的ContentTemplate

  15. 15

    通过脚本确定 WPF 中的哪个控件具有焦点

  16. 16

    如何通过wpf画布中的坐标获取矩形位置

  17. 17

    通过CDN进行Bootstrap的Visual Studio智能感知

  18. 18

    通过CDN进行Bootstrap的Visual Studio智能感知

  19. 19

    如何通过准确使用调度程序计时器来控制WPF中的帧速率?

  20. 20

    我必须通过WPF中的接口来实现所有usercontrol属性吗?

  21. 21

    通过单击 c# 中的按钮在 wpf 应用程序中添加树视图

  22. 22

    列表理解:通过在单个列表中添加多个值来创建新列表

  23. 23

    如何通过WPF DataTrigger在多值转换器中传递多个参数

  24. 24

    WPF通过双向绑定从ViewModel中选择DataGrid中的多个项目

  25. 25

    如何通过与数据库的绑定将选项“全部”添加到WPF中的组合框

  26. 26

    如何通过与数据库的绑定将选项“全部”添加到WPF中的组合框

  27. 27

    WPF名称空间无法与智能感知一起使用

  28. 28

    如何通过在WPF中进行绑定来设置复选框内容的背景色

  29. 29

    WPF:如何通过设置动态创建的按钮的标签来调用方法

热门标签

归档