C# 在不同的类中,如何检查WPF元素的属性?
我正在遵循一系列不同的例子,并试图用它来做我自己的事情 本质上,在我的代码隐藏中,我有一个单独的类。我认为这是用于MVVM的,尽管我几乎不知道这是什么意思(我明白了,但它看起来很混乱!) 无论如何。。。以下是我在WPF表单的单独类(相同命名空间)中的代码:C# 在不同的类中,如何检查WPF元素的属性?,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正在遵循一系列不同的例子,并试图用它来做我自己的事情 本质上,在我的代码隐藏中,我有一个单独的类。我认为这是用于MVVM的,尽管我几乎不知道这是什么意思(我明白了,但它看起来很混乱!) 无论如何。。。以下是我在WPF表单的单独类(相同命名空间)中的代码: public class ChartViewModel { public ChartViewModel() { DataTable dataNames = new DataTab
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。如果您还没有使用它,那么请这样做,因为它会为您处理属性更改的内容,并在列表中添加/删除项目时更新绑定
如果我遗漏了什么,请告诉我。首先