如何让我的WPF ListView与我的List正确绑定,以便在数据更改时视图更新?

时间:2011-03-14 18:16:49

标签: c# xaml listview binding

到目前为止,每个ListView我都在我的Xaml中设置了ItemSource = {Binding},然后在.CS文件中我说listview.datacontext = myobject并且视图加载得很好。但是现在我需要有一个更新的列表作为数据更新。因此,经过一些研究后,我发现了ObservableCollections并重写了我的代码以使用它。但是在将listview设置为我的数据对象时,我无法显示数据。

我的Xaml:

            <ListView ItemsSource="{Binding Tests}" Name="DataCompareTests" Margin="0,0,5,0" Grid.Column="0">
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="TestCase" Width="200" DisplayMemberBinding="{Binding name}" />
                    </GridView>
                </ListView.View>
            </ListView>

我的Xaml.cs:

readonly DataCompare dataCompare = new DataCompare();

public void Execute_Click(object sender, RoutedEventArgs e)
    {

        var Tests = new ObservableCollection<TestCases>();
        Tests = dataCompare.LoadTestCases();  //located in another class file
        //DataCompareTests.DataContext = Tests;
    }

如果我删除了Xaml中绑定的“Te​​sts”部分并从上面的.DataContext行中删除了注释,则视图会显示正确的信息。然而,我的假设是,如果我希望我的视图更新为数据,我需要在绑定中指定我的对象。我该如何正确设置?我似乎找不到正确的答案。

谢谢,

杰森

2 个答案:

答案 0 :(得分:2)

我认为你需要通过一般的绑定和面向对象编程来更好地熟悉自己。

如果将datacontext设置为模型对象,则“.Tests”应该是该模型对象的公共属性。另外,不要这样做:

var someVariable = new SomeClassThatTakesWorkToConstruct();
someVarialbe = someOtherVariable.SomeMethod();

你打算这样做: var someVariable = someOtherVariable.SomeMethod();

这有两个很好的理由1)你没有浪费ObservableCollection的构造。 2)您的代码将更容易重构(SomeMethod返回的类型可以更改,而无需您更改someVariable的声明)。

编辑,其他资源:

Databinding Overview 您已为指定的绑定指定了路径但没有

MVVM Article 关于使用通用MVVM WPF模式的精彩文章,即使在复杂的UI交互中,也可以帮助您保持代码对象的面向,清洁等。

答案 1 :(得分:0)

看起来我的担忧毫无意义,我首先以正确的方式做到这一点。

根据MSDN:

  

“但是,如果绑定到已创建的对象,则需要在代码中设置&gt; DataContext,如下例所示。   ...   myListBox.DataContext = myDataSet;“

我的对象已经创建,我确实在代码中设置了DataContext。我所要做的就是将ListView ItemSource保留为{Binding},每次添加到Tests对象时,列表都会更新..

我无法相信我花了一整天的时间怀疑我是在正确地做这件事而没有前进检查。 : - )