簡體   English   中英

綁定Listview的GridView的DataGridCell的TextBlock

[英]Binding the TextBlock of a Listview's GridView's DataGridCell

我有一個ObservableCollection的模型對象,試圖在ListViewGridViewDataGridCells中顯示。 對於此簡化示例,假設我的模型對象都具有“ MyString”,並且我試圖在每行DataGridCell內的TextBlock顯示“ MyString”。

ObservableCollection添加或刪除這些模型對象時, ListView顯示正確的行數,但是單個單元格為空。 如何正確綁定它們? 我應該使用DataContext還是ItemSource ,如果使用的話,在哪里? 這是這種綁定嘗試的單列示例。

<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;
}

ViewModel:

ObservableCollection<MyModel> MyObservableCollection = new ObservableCollection<MyModel>();

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

public string MyString; 是一個字段,而不是一個屬性。 您無法綁定到字段。 您只能綁定到屬性。

private string _myString;
public string MyString
{
    get
    {
        return _myString;
    }
    set
    {
        _myString = value;
        OnPropertyChanged("MyString");
    }
}

我將OnPropertyChanged的實現留給您。

澄清

這是一個屬性

public string DERP { get; set; } 

注意它有一個getter和setter。 編譯器將其轉換為兩種方法,一種用於獲取值,另一種用於設置值。

這是一個領域

public string HERP;

注意,它沒有getter或setter。 它只是指向堆棧上的值的指針。

重要的是:

在WPF中,綁定不適用於FIELDS 它們僅與PROPERTIES一起使用

因此,在嘗試綁定該字段之前先設置該字段的值無關緊要。 綁定將不會在尋找字段,因此不會看到它。

沒錯,您的Model類需要將MyString作為屬性而不是字段。

C#中的字段和屬性之間有什么區別?

WPF-綁定-綁定源

您可以綁定到任何公共語言運行時(CLR)對象的公共屬性,子屬性以及索引器。 綁定引擎使用CLR反射來獲取屬性的值。 或者,實現ICustomTypeDescriptor或具有已注冊TypeDescriptionProvider的對象也可以與綁定引擎一起使用。 有關如何實現可用作綁定源的類的更多信息,請參見本主題后面的為綁定源實現類。

public class MyModel : INotifyPropertyChanged
{
    private string _myString;
    public string MyString
    {
        get
        {
            return _myString;
        }
        set
        {
            _myString = value;
            OnPropertyChanged("MyString");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM