Wpf:如何在列表视图中将gridview列的绑定路径更改为运行时的数据表的另一列?

时间:2015-10-20 12:34:42

标签: c# wpf xaml listview gridview

以下是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();
        }

1 个答案:

答案 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。当您更改它时,绑定列的数据源将从一个属性切换到另一个属性。