c# - 绑定(bind) Listview 的 GridView 的 DataGridCell 的 TextBlock

标签 c# xaml mvvm data-binding

我有一个 ObservableCollection我试图在 DataGridCells 中显示的模型对象的 GridViewListView .对于这个简化的例子,假设我的模型对象都有“MyString”,并且我试图在 TextBlock 中显示“MyString”。每行的 DataGridCell 内.

作为 ObservableCollection添加或删除这些模型对象,ListView显示正确的行数,但是各个单元格为空。如何正确绑定(bind)它们?我应该使用 DataContextItemSource ,如果是这样,在哪里?这是一个此类绑定(bind)尝试的单列示例。

<ListView ItemsSource="{Binding MyObservableCollection}">
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <GridViewColumnHeader Content="My String Data" />
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <DataGridCell>
                            <TextBlock Text="{Binding Path=MyString}">
                            </TextBlock>
                        </DataGridCell>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

编辑:Per Michal Ciechan,我已经实现了 INotifyPropertyChanged在我的模型课上,但它似乎没有改变任何东西。但是,一旦它们在集合中,我实际上不会更改这些对象上的字段,因此这可能不是正确的方法。这是更多示例代码。

该模型:
public class MyModel : INotifyPropertyChanged
{
    public string MyString;
    public event PropertyChangedEventHandler PropertyChanged;
}

View 模型:
ObservableCollection<MyModel> MyObservableCollection = new ObservableCollection<MyModel>();

public void AddModelToCollection()
{
    MyModel mm = new MyModel();
    mm.MyString = "HELLO WORLD";
    MyObservableCollection.Add(mm);
}

最佳答案

public string MyString;是一个字段,而不是一个属性。您不能绑定(bind)到字段。您只能绑定(bind)到属性。

private string _myString;
public string MyString
{
    get
    {
        return _myString;
    }
    set
    {
        _myString = value;
        OnPropertyChanged("MyString");
    }
}
我将离开 OnPropertyChanged 的实现给你。
澄清
这是 PROPERTY :
public string DERP { get; set; } 
请注意,它有一个 getter 和一个 setter。编译器将其转换为两种方法,一种用于获取值,另一种用于设置值。
这是 FIELD :
public string HERP;
请注意,它没有 getter 或 setter。它只是一个指向堆栈上的值的指针。
这是重要的一点:
在 WPF 中,绑定(bind)不适用于 领域 .他们只适用于 属性(property)
因此,在尝试绑定(bind)字段之前设置字段的值并不重要。 Binding 不会寻找字段,因此不会看到它。

关于c# - 绑定(bind) Listview 的 GridView 的 DataGridCell 的 TextBlock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989084/

相关文章:

c# - 同时运行两个函数

C# OPENXML XLSX 自定义列宽

c# - 通过 WPF 命令模式启用提交/取消按钮

wpf - 如何将 XAML Storyboard动画添加到 XBAP 中的完整 WPF 自定义控件?

c# - 如何加快向 AzureEventHub 发送事件的速度?

wpf - WPF 中图像填充按钮上的空间

c# - WPF RichTextBox 插入图片和撤消操作

android - 关于Room和Paging Library的一些问题

mvvm - MVVM 模式中 View-first 与 ViewModel-first 的优缺点是什么

c# - 如何在应用程序外壳中实现繁忙指示器