How to bind to a nested class wpf

被刻印的时光 ゝ 提交于 2019-12-24 05:15:11

问题


I have a view model called FieldViewModel:

public class FieldViewModel: INotifyPropertyChanged
{
    private Field m_field;
    public Field FieldData
    {
        get { return m_field; }
        set
        {
            m_field = value;
            NotifyPropertyChanged("FieldData");
        }
    }

and the Field class:

public class Field : INotifyPropertyChanged
{     

    public List<string> SqlTypes
    {
        get { return Enum.GetNames(typeof(SqlDbType)).ToList(); }
    }


    private string m_FieldName = null;
    public string FieldName
    {
        get { return m_FieldName; }
        set
        {
            m_FieldName = value;
            NotifyPropertyChanged("FieldName");
        }
    }

    private string m_FieldType = null;
    public string FieldType
    {
        get { return m_FieldType; }
        set
        {
            m_FieldType = value;
            NotifyPropertyChanged("FieldType");
        }
    }

    private bool m_NullAllow = false;
    public bool NullAllow
    {
        get { return m_NullAllow; }
        set
        {
            m_NullAllow = value;
            NotifyPropertyChanged("NullAllowsChecked");
        }
    }

    #region INotifyPropertyChanged
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
    #endregion
}

The Xaml:

<ComboBox ItemsSource="{Binding FieldData.SqlTypes}" SelectionChanged="cmbField_Selected" Width="20" Height="20" Margin="5,5,0,5" VerticalAlignment="Top" HorizontalAlignment="Left"/>
        <TextBox Width="120" Height="20" Text="{Binding FieldType}" Margin="0,5" VerticalAlignment="Top" HorizontalAlignment="Left"/>

now in the xaml i want to bind the variables of the Field Class but i can't see them

I tried some thing but nothing works, if i put the variables of the Field Class inside the FieldViewModel it works good.

Thank for your help.


回答1:


Here is an example which works for me:

<Window x:Class="DataGridExample.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DataGrid x:Name="czesciTable" ItemsSource="{Binding model.list}" 
              AutoGenerateColumns="False"
              CanUserAddRows="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

Viewmodel:

public class ViewModel
{
    public Model model { get; set; }

    public ViewModel()
    {
        model = new Model();
    }
}

And model:

public class Model 
{
    public List<String> list { get; set; }

    public Model()
    {
        list = new List<string>();

        list.Add("Item1");
        list.Add("Item2");
        list.Add("Item3");
    }
}

Result:

Or ComboBox:

<ComboBox ItemsSource="{Binding model.list}" VerticalAlignment="Top"/> 




回答2:


The code in the question was mainly correct. It was only missing the initialization of the Field Class.



来源:https://stackoverflow.com/questions/31041542/how-to-bind-to-a-nested-class-wpf

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!