Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在不同的类中,如何检查WPF元素的属性?_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 在不同的类中,如何检查WPF元素的属性?

C# 在不同的类中,如何检查WPF元素的属性?,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正在遵循一系列不同的例子,并试图用它来做我自己的事情 本质上,在我的代码隐藏中,我有一个单独的类。我认为这是用于MVVM的,尽管我几乎不知道这是什么意思(我明白了,但它看起来很混乱!) 无论如何。。。以下是我在WPF表单的单独类(相同命名空间)中的代码: public class ChartViewModel { public ChartViewModel() { DataTable dataNames = new DataTab

我正在遵循一系列不同的例子,并试图用它来做我自己的事情

本质上,在我的代码隐藏中,我有一个单独的类。我认为这是用于MVVM的,尽管我几乎不知道这是什么意思(我明白了,但它看起来很混乱!)

无论如何。。。以下是我在WPF表单的单独类(相同命名空间)中的代码:

public class ChartViewModel
    {
        public ChartViewModel()
        {
            DataTable dataNames = new DataTable();
            try
            {
                var db = new SQLiteDatabase();
                string query = "SELECT DISTINCT Name FROM Main";
                ...
现在,我的WPF xaml页面上有一个名为AccountType的文本块。其中的文本可以在三个不同的值之间循环,我需要在此基础上更改上面代码块末尾的字符串查询。如果是一个值,则字符串=x。如果是第二个值,字符串=y等

类的这一部分用于用数据库中的条目填充组合框。更改该字符串会自动强制组合框更新吗?或者在这之后我还会做别的事情吗

根据要求,这是我的XAML(反正是相关的东西)


全景模型

public class ChartViewModel
{
    public ChartViewModel()
    {
        AccountType = "Main";

        DataTable dataNames = new DataTable();
        try
        {
            var db = new SQLiteDatabase();
            string query = "SELECT DISTINCT Name FROM Main";

            dataNames = db.GetDataTable(query);
        }
        catch (Exception fail)
        {
            string error = "The following error has occured:\n\n";
            //error += fail.Message.ToString() + "\n\n";
            //System.Windows.MessageBox.Show(error);
        }

        this.Names = new ObservableCollection<string> { };

        foreach (DataRow row in dataNames.Rows)
        {
            string name = row["Name"].ToString();
            Names.Add(name);
        }


        int x = 42067;

        DataTable datastats = new DataTable();
        try
        {
            var db = new SQLiteDatabase();
            String query = "SELECT * FROM Main WHERE Name = \"9n\"";
            datastats = db.GetDataTable(query);
        }
        catch (Exception fail)
        {
            String error = "The following error has occurred:\n\n";
            //error += fail.Message.ToString() + "\n\n";
            //System.Windows.MessageBox.Show(error);
        }

        this.overall = new List<DataPoint>
        {
            //foreach(DataRow row in datastats.Rows)
            //{

            //}
        };

        foreach (DataRow row in datastats.Rows)
        {
            DateTime sDate = DateTime.Parse(row["Date"].ToString());
            //int date = ((sDate.Year - 1900)) + sDate.Day;
            sDate = sDate.Date;
            double date = sDate.ToOADate() - 1;
            int dateint = Convert.ToInt32(date);

            string sLevel = row["OverallL"].ToString();
            int level = Convert.ToInt32(sLevel);

            this.overall.Add(new DataPoint(date, level));

        }

        this.overall.Add(new DataPoint(42100, 10));
        this.overall.Add(new DataPoint(42110, 10));

        this.Title2 = "Example 2";
        this.Points = new List<DataPoint>
            {
                new DataPoint(x, 4),
                new DataPoint(42077, 13),
                new DataPoint(42087, 15),
                new DataPoint(42097, 16),
                new DataPoint(42107, 12),
                new DataPoint(42117, 12)
            };
        this.Data = new List<DataPoint>
            {
                new DataPoint(42067, 10),
                new DataPoint(42077, 15),
                new DataPoint(42087, 16),
                new DataPoint(42097, 20),
                new DataPoint(42107, 10),
                new DataPoint(42117, 12)
            };
    }


    public string Title2 { get; private set; }

    public IList<DataPoint> Points { get; private set; }
    public IList<DataPoint> Data { get; private set; }
    public IList<DataPoint> overall { get; private set; }

    public ObservableCollection<string> Names { get; private set; }

    private string _AccountType;

    public string AccountType
    {
        get { return _AccountType; }
        set
        {
            _AccountType = value;

            //OnPropertyChanged stuff here.
        }
    }

}
公共类ChartViewModel
{
公共图表视图模型()
{
AccountType=“Main”;
DataTable dataNames=新DataTable();
尝试
{
var db=new SQLiteDatabase();
string query=“从Main中选择不同的名称”;
dataNames=db.GetDataTable(查询);
}
捕获(异常失败)
{
string error=“发生了以下错误:\n\n”;
//错误+=fail.Message.ToString()+“\n\n”;
//System.Windows.MessageBox.Show(错误);
}
this.Names=新的ObservableCollection{};
foreach(dataNames.Rows中的DataRow行)
{
字符串名称=行[“名称”]。ToString();
名称。添加(名称);
}
INTX=42067;
DataTable datastats=新的DataTable();
尝试
{
var db=new SQLiteDatabase();
String query=“从Main中选择*,其中Name=\“9n\”;
datastats=db.GetDataTable(查询);
}
捕获(异常失败)
{
String error=“发生了以下错误:\n\n”;
//错误+=fail.Message.ToString()+“\n\n”;
//System.Windows.MessageBox.Show(错误);
}
this.total=新列表
{
//foreach(datastats.Rows中的DataRow行)
//{
//}
};
foreach(datastats.Rows中的DataRow行)
{
DateTime sDate=DateTime.Parse(行[“Date”].ToString());
//int date=((1900年12月14日))+sDate.Day;
sDate=sDate.日期;
double date=sDate.ToOADate()-1;
int dateint=Convert.ToInt32(日期);
字符串sLevel=row[“overall”].ToString();
int级别=转换为32(sLevel);
添加(新数据点(日期、级别));
}
添加(新数据点(42100,10));
添加(新数据点(42110,10));
this.Title2=“示例2”;
this.Points=新列表
{
新数据点(x,4),
新数据点(42077,13),
新数据点(42087,15),
新数据点(42097,16),
新数据点(42107,12),
新数据点(42117,12)
};
this.Data=新列表
{
新数据点(42067,10),
新数据点(42077,15),
新数据点(42087,16),
新数据点(42097,20),
新数据点(42107,10),
新数据点(42117,12)
};
}
公共字符串标题2{get;private set;}
公共IList点{get;private set;}
公共IList数据{get;private set;}
公共IList总体{get;私有集;}
公共可观测集合名称{get;private set;}
私有字符串\u AccountType;
公共字符串AccountType
{
获取{return\u AccountType;}
设置
{
_AccountType=值;
//OnProperty改变了这里的东西。
}
}
}

首先,在ViewModel中,您可以为AccountType textblock创建要绑定到的属性:

private string _AccountType;

    public string AccountType
    {
        get { return _AccountType; }
        set 
        { 
            _AccountType = value; 

            //OnPropertyChanged stuff here.
        }
    }
当您循环帐户类型时,更新此属性,它也将更新UI

首先需要在TextBlock上设置绑定:

<TextBlock Text="{Binding AccountType}" ... />

然后,您可以在查询中简单地使用此属性

类的这一部分用于用数据库中的条目填充组合框。更改该字符串会自动强制组合框更新吗?或者在这之后我还会做别的事情吗

对于从UI绑定到的列表,最好使用ObservableCollection。如果您还没有使用它,那么请这样做,因为它会为您处理属性更改的内容,并在列表中添加/删除项目时更新绑定


如果我遗漏了什么,请告诉我。

首先,在您的ViewModel中,您可以为AccountType textblock创建一个要绑定到的属性:

private string _AccountType;

    public string AccountType
    {
        get { return _AccountType; }
        set 
        { 
            _AccountType = value; 

            //OnPropertyChanged stuff here.
        }
    }
当您循环帐户类型时,更新此属性,它也将更新UI

首先需要在TextBlock上设置绑定:

<TextBlock Text="{Binding AccountType}" ... />

然后,您可以在查询中简单地使用此属性

类的这一部分用于用数据库中的条目填充组合框。更改该字符串会自动强制组合框更新吗?或者在这之后我还会做别的事情吗

对于从UI绑定到的列表,最好使用ObservableCollection。如果您还没有使用它,那么请这样做,因为它会为您处理属性更改的内容,并在列表中添加/删除项目时更新绑定

如果我遗漏了什么,请告诉我。

首先