以下是xaml代码示例:
<listview>
blah blah blah..
......................
<ListView.View>
<GridView>
<GridViewColumn Header="Date" Width="180" DisplayMemberBinding="{Binding Path=Date}" />
<GridViewColumn Header="Status" Width="80" DisplayMemberBinding="{Binding Path=col1}" />
</GridView>
</ListView.View>
</ListView>
此处此绑定路径 DisplayMemberBinding =“{Binding Path = Date}
/ * Date是绑定* /
的SQL数据表的列名
假设这个数据表有3列 - col1,col2和col3。我想要的是在运行时将listview的第二列(当前绑定到col1)的绑定路径更改为此数据表的col2或col3。这意味着当我运行我的程序并单击一个按钮时,列表视图的第二列将自动更改。
C#代码
conn = new SqlCeConnection(constr);
try
{
conn.Open();
string query = "SELECT * FROM " + tablename + "";
cmd = new SqlCeCommand(query, conn);
cmd.ExecuteNonQuery();
SqlCeDataAdapter da = new SqlCeDataAdapter(cmd);
DataSet ds = new DataSet(tablename);
da.Fill(ds);
sview.ItemsSource = ds.Tables[0].DefaultView; //sview is the name of listview
da.Update(ds);
conn.Close();
}
答案 0 :(得分:1)
不要改变约束力。使用视图模型:
public class MyModel
{
public string Property1 { get; set; }
public string Property2 { get; set; }
}
public class MyViewModel : INotifyPropertyChanged
{
private readonly MyModel _model;
private bool _displayProperty1;
public MyViewModel(MyModel model)
{
_model = model;
}
public bool DisplayProperty1
{
get { return _displayProperty1; }
set
{
_displayProperty1 = value;
OnPropertyChanged("DisplayProperty1");
OnPropertyChanged("PropertyToDisplay");
}
}
public string PropertyToDisplay
{
get
{
return DisplayProperty1 ? _model.Property1 : _model.Property2;
}
}
}
XAML:
<GridViewColumn Header="Status" Width="80" DisplayMemberBinding="{Binding PropertyToDisplay}" />
您可以从切换按钮或使用常规按钮+命令更改DisplayProperty1
。当您更改它时,绑定列的数据源将从一个属性切换到另一个属性。