Привязка itemSource объекта gridview к ViewModel с помощью INotifyPropertyChanged - PullRequest
0 голосов
/ 24 мая 2019

Я хочу, чтобы моя ViewModel прошла через все внутренние элементы моего gridView с помощью функции Test (). Мой "gridVariable" (см. Код) по какой-то причине возвращает ноль. При получении и установке значений в TextBox у меня нет проблем. Почему GridView возвращает нуль и как я могу это исправить?

MainViewModel.cs

    public class MainViewModel : Observable, INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public MainViewModel(){}

        private GetGridView _myGridView = new GetGridView();
        public GetGridView MyGridView
        {
            get { return _myGridView; }
        }

        public void Test()
        {
            var gridVariable = MyGridView.AnswersGrid;
            foreach (var i in gridVariable.Items) MyText.Text += "x";
        }

        private GetText _myText = new GetText();
        public GetText MyText
        {
            get { return _myText; }
            set
            {
                _myText = value;
            }
        }
    }

GetGridView.cs

    public class GetGridView : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private GridView _grid;
        public GridView AnswersGrid
        {
            get { return _grid; }
        }
    }

MainPage.xaml.cs

    public MainViewModel ViewModel { get; } = new MainViewModel();
    public MainPage()
    {
        InitializeComponent();
        this.DataContext = ViewModel;
    }

MainPage.xaml

    <RelativePanel>
        <GridView
            x:Name="GridView"
            ItemsSource="{Binding MyGridView.AnswersGrid, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}">
            <TextBox Text="{Binding MyText.Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  />
            <TextBox/>
        </GridView>
        <Button RelativePanel.Below="GridView" Content="butn" Click="{x:Bind ViewModel.Test}"></Button>
    </RelativePanel>

1 Ответ

0 голосов
/ 27 мая 2019

Привязка itemSource объекта gridview к ViewModel с помощью INotifyPropertyChanged

Я проверил ваше требование, если вы хотите использовать шаблон MVVM, вам нужно разделить View и Model. Я переписал твой код. пожалуйста, проверьте следующее.

ViewModel

public class MainPageViewModel : INotifyPropertyChanged
{
    public MainPageViewModel()
    {
        items = new ObservableCollection<Item>();
        items.Add(new Item { Info = "01" });
        items.Add(new Item { Info = "02" });
        items.Add(new Item { Info = "03" });
        items.Add(new Item { Info = "04" });
        items.Add(new Item { Info = "05" });
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public ObservableCollection<Item> items;
    public void Test()
    {
        foreach (var item in items)
        {
            item.Info += "X";
        }
    }

}

public class Item : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    private string _info;
    public string Info
    {
        get
        {
            return _info;
        }
        set
        {
            _info = value;
            OnPropertyChanged();
        }
    }
}

Использование

<GridView
    x:Name="GridView"
    ItemsSource="{x:Bind ViewModel.items}">
    <GridView.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Info}"/>
        </DataTemplate>
    </GridView.ItemTemplate>

</GridView>
<Button RelativePanel.Below="GridView" Content="butn" Click="{x:Bind ViewModel.Test}"></Button>

Для получения более подробной информации, пожалуйста, обратитесь Привязка данных и MVVM

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...