Datagrid는 비어 있지만 ObservableCollection에는 값이 있습니다.

요하네스 메 이른 호퍼

현재 나는 WPF를 배우려고 노력하고 있지만 몇 시간 동안 인터넷 검색을 통해 스스로 해결하려고 노력한 후 현재 문제로 brickwall에 부딪 혔습니다. Model Province를 표시하려고합니다. 유사한 문제를 여러 개 발견했지만 스스로 알아낼 수 없었습니다. 출력을 확인한 후 오류에 대한 언급이 없습니다. 현재 창에는 빈 모델 만 표시되지만 Observable 컬렉션이 업데이트 되더라도 데이터는 표시되지 않습니다. 그래서 WPF에 대한 관심을 완전히 없애기 전에 도움을 요청합니다.

MyView

<Window x:Class="isnuaatest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:isnuaatest"
    xmlns:local1="clr-namespace:isnuaatest.Models"
    xmlns:local2="clr-namespace:isnuaatest.ViewModel"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
    <local2:MainWindowViewModel/>
</Window.DataContext>
<Grid>
    <Grid>
        <DataGrid ItemsSource="{Binding Provinces, UpdateSourceTrigger=PropertyChanged}">
        </DataGrid>
    </Grid>
    <StackPanel Width="200" Margin="50">
        <Button x:Name="OpenSaveFile" Click="OpenSaveFile_Click">OpenSaveFile</Button>
    </StackPanel>
</Grid>

내보기 모델

using isnuaatest.Helper;
using isnuaatest.Models;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Input;

namespace isnuaatest.ViewModel
{
    public class MainWindowViewModel : INotifyPropertyChanged
    {
        public ObservableCollection<Province> _province;
        public ObservableCollection<Province> Provinces
        {
            get { return this._province; }
            set
            {
                _province = value;
            }
        }
        public MainWindowViewModel() : base()
        {
            this.Provinces = new ObservableCollection<Province>();
        }

        private string _savegamePath;
        public string SavegamePath
        {
            get { return _savegamePath; }
            set { _savegamePath = value; OnPropertyChanged("SavegamePath"); GetProvinces(_savegamePath);}
        }



        public event PropertyChangedEventHandler PropertyChanged;
        protected virtual void OnPropertyChanged(string propertyName)
        {
            var savegamefile = this.PropertyChanged;
            if (savegamefile != null)
                savegamefile(this, new PropertyChangedEventArgs(propertyName));
        }
        public event EventHandler OnItemChanged;
        public void GetProvinces(string path)
        {
            Reader reader = new Reader();
            if (_savegamePath != null)
            {
                FileStream fs = File.OpenRead(path);
                List<Province> listofProvinces = reader.ReadTextString(fs);
                foreach (Province province in listofProvinces)
                {
                    Provinces.Add(new Province()
                    {
                        Aristocrats = province.Aristocrats,
                        Artisans = province.Artisans
                    });
                }
            }
        }
    }
}

코드 비하인드

using isnuaatest.Helper;
using isnuaatest.Models;
using isnuaatest.ViewModel;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace isnuaatest
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindowViewModel _vm = new MainWindowViewModel();
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainWindowViewModel();
        }
        private void OpenSaveFile_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Multiselect = false;

            dynamic result = fileDialog.ShowDialog();

            if (result == true)
            {
                _vm.SavegamePath = fileDialog.FileName;
            }
        }
    }
}

내 생각은 데이터가 Observable 컬렉션에 있기 때문에 데이터 컨텍스트가 업데이트되지 않을 수도 있다는 것입니다. 이것이 사실이라면 데이터 컨텍스트를 어떻게 업데이트 할 수 있습니까? 이미 xaml에 추가하려고 시도했지만 아무 소용이 없습니다.

감사

Quercus

실제로 MainWindowViewModelxaml에서 하나와 코드 뒤에 두 개의 다른 객체를 만듭니다 . MainWindow생성자 에서 설정 한 DataContextxaml-one이 재정의 되면 xaml에서 하나를 제거 할 수 있습니다 .
그러나 코드 숨김의 두 개체가 문제를 유발합니다. 파일을 _vm개체에 로드 하지만 DataContext.
문제의 사용을 해결하기 _vm위해 DataContext이 아닌 새로운 객체 :

public MainWindowViewModel _vm = new MainWindowViewModel();
public MainWindow()
{
     InitializeComponent();
     DataContext = _vm;
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

입력에 값이 있지만 ngModel이 비어 있습니다.

분류에서Dev

if 문에 대한 변수가 비어있는 것처럼 보이지만 비어 있지 않습니다.

분류에서Dev

Selenium Python은 변수 값이 비어 있지 않은지 확인합니다. 나는 거짓을 얻고 있지만 가치가 있습니다.

분류에서Dev

QSqlTableModel.setData 오류이지만 lastError ()는 항상 비어 있습니다.

분류에서Dev

테이블에서 값을 가져 오는 것이 비어 있습니다.

분류에서Dev

개체 또는 열 이름이 없거나 비어 있습니다. 하지만 그렇지 않습니까?

분류에서Dev

값이 있지만 내 사전이 비어 있습니다.

분류에서Dev

변수에 값이 있지만 양식 표시가 비어있는 이유는 무엇입니까?

분류에서Dev

Python pandas는 df가 비어 있지만 열에 요소가 있습니다.

분류에서Dev

'id'가있는 플레이어를 찾을 수 없지만 DB에있는 플레이어가 있습니다.

분류에서Dev

NHibernate 결과는 ClassMap에서는 비어 있지만 원시 SQL에서는 비어 있습니다.

분류에서Dev

무들 : 첫 페이지는 비어 있습니다.

분류에서Dev

Textfield는 비어 있지만 Swift에서 비어있는 것으로 간주하지 않습니다.

분류에서Dev

Textfield는 비어 있지만 Swift에서 비어있는 것으로 간주하지 않습니다.

분류에서Dev

크론 작업 클라우드 감시 이벤트 오류 : "이벤트 패턴에 잘못된 값이 포함되어 있습니다 (비어 있지 않은 배열 또는 비어 있지 않은 개체 만 가능).

분류에서Dev

ajax로 데이터를 보내지 만 PHP에서는 $ _POST가 비어 있습니다.

분류에서Dev

preg_match_all 이메일 '받는 사람'값이 비어 있습니다.

분류에서Dev

코드가 비어있는 위 행에 값을 붙여 넣지 않습니다.

분류에서Dev

VBA로 만든 CSV 파일에는 셀이 비어 있어도 끝에 빈 행이 있습니다.

분류에서Dev

glGetProgramIv는 셰이더 링크가 실패했다고 주장하지만 glGetProgramInfoLog가 비어 있습니다.

분류에서Dev

HttpReponseMessage에 StatusCode 200이 있지만 '결과'가 비어 있습니다.

분류에서Dev

XSLT 파일을 사용하는 동안 값이 비어 있습니다.

분류에서Dev

Jquery 변경에서 비어 있거나 null 값을 설정하는 방법이 작동하지 않습니다.

분류에서Dev

React 초기 입력 값이 비어 있고 상태 또는 소품 값을 취하지 않습니다.

분류에서Dev

부트 스트랩 모달이 페이드 인되지만 컨테이너는 비어 있습니다.

분류에서Dev

MySQL : 열에서 ID는 같지만 값이 다른 두 행을 어떻게 검색 할 수 있습니까?

분류에서Dev

첫 번째 $ _GET 필드가 비어 있지만 두 번째 필드에 값이있는 경우 에코하여 누락 된 값을 채 웁니다.

분류에서Dev

R 정규식은 비슷한 단어를 추출하지만 하나는 하이픈이 있습니다.

분류에서Dev

Python 3.8.6에는 최신 버전의 Python이 설치되어 있지만 설치되어 있지 않습니다.

Related 관련 기사

  1. 1

    입력에 값이 있지만 ngModel이 비어 있습니다.

  2. 2

    if 문에 대한 변수가 비어있는 것처럼 보이지만 비어 있지 않습니다.

  3. 3

    Selenium Python은 변수 값이 비어 있지 않은지 확인합니다. 나는 거짓을 얻고 있지만 가치가 있습니다.

  4. 4

    QSqlTableModel.setData 오류이지만 lastError ()는 항상 비어 있습니다.

  5. 5

    테이블에서 값을 가져 오는 것이 비어 있습니다.

  6. 6

    개체 또는 열 이름이 없거나 비어 있습니다. 하지만 그렇지 않습니까?

  7. 7

    값이 있지만 내 사전이 비어 있습니다.

  8. 8

    변수에 값이 있지만 양식 표시가 비어있는 이유는 무엇입니까?

  9. 9

    Python pandas는 df가 비어 있지만 열에 요소가 있습니다.

  10. 10

    'id'가있는 플레이어를 찾을 수 없지만 DB에있는 플레이어가 있습니다.

  11. 11

    NHibernate 결과는 ClassMap에서는 비어 있지만 원시 SQL에서는 비어 있습니다.

  12. 12

    무들 : 첫 페이지는 비어 있습니다.

  13. 13

    Textfield는 비어 있지만 Swift에서 비어있는 것으로 간주하지 않습니다.

  14. 14

    Textfield는 비어 있지만 Swift에서 비어있는 것으로 간주하지 않습니다.

  15. 15

    크론 작업 클라우드 감시 이벤트 오류 : "이벤트 패턴에 잘못된 값이 포함되어 있습니다 (비어 있지 않은 배열 또는 비어 있지 않은 개체 만 가능).

  16. 16

    ajax로 데이터를 보내지 만 PHP에서는 $ _POST가 비어 있습니다.

  17. 17

    preg_match_all 이메일 '받는 사람'값이 비어 있습니다.

  18. 18

    코드가 비어있는 위 행에 값을 붙여 넣지 않습니다.

  19. 19

    VBA로 만든 CSV 파일에는 셀이 비어 있어도 끝에 빈 행이 있습니다.

  20. 20

    glGetProgramIv는 셰이더 링크가 실패했다고 주장하지만 glGetProgramInfoLog가 비어 있습니다.

  21. 21

    HttpReponseMessage에 StatusCode 200이 있지만 '결과'가 비어 있습니다.

  22. 22

    XSLT 파일을 사용하는 동안 값이 비어 있습니다.

  23. 23

    Jquery 변경에서 비어 있거나 null 값을 설정하는 방법이 작동하지 않습니다.

  24. 24

    React 초기 입력 값이 비어 있고 상태 또는 소품 값을 취하지 않습니다.

  25. 25

    부트 스트랩 모달이 페이드 인되지만 컨테이너는 비어 있습니다.

  26. 26

    MySQL : 열에서 ID는 같지만 값이 다른 두 행을 어떻게 검색 할 수 있습니까?

  27. 27

    첫 번째 $ _GET 필드가 비어 있지만 두 번째 필드에 값이있는 경우 에코하여 누락 된 값을 채 웁니다.

  28. 28

    R 정규식은 비슷한 단어를 추출하지만 하나는 하이픈이 있습니다.

  29. 29

    Python 3.8.6에는 최신 버전의 Python이 설치되어 있지만 설치되어 있지 않습니다.

뜨겁다태그

보관