Windows 형식으로이 작업을 만들려고했지만 wpf mvvm이 더 좋을 것이라고 들었습니다. 나는 C#에 익숙하지 않고 mvvm과 wpf를 연구하고있다.MVVM ViewModel 만들기 및 바인딩
이제 뷰와 모델 모두에서 작동하도록 내 viewmodel에서 작업하고 있습니다. 데이터베이스가 없습니다.
내 문제 : 나는 올바르게 뷰 모델에보기를 결합 어떻게
. 내 xaml 어딘가에 itemssource 또는 localsource 코드가 누락되었지만 itemsource 작동 방식을 이해하지 못합니다. viewmodel에서 선언 된 itemsource가 어디에 있는지. 좋은 답변을 찾기 위해 인터넷 검색을 해왔지만 아직 나를 클릭하는 링크를 찾지 못했습니다.
또한 INotifyChange 유형 속성이 있고 일부 코드 예제를 본 적이 있지만 완전히 이해하지는 않았으며 단지 나를 클릭하지 않았습니다. 현재
는 :
나는 첫 번째 코드 아래와 같습니다 XAML에서 만든 볼 수 있습니다. 그런 다음 C#에서 두 번째 코드 그룹 인 스캔을위한 클래스를 만들었습니다. get set 메서드는 개선 될 수 있지만 튜토리얼을 따라갔습니다.
스캔 건을 사용하는 사용자는 스캔 할 때 화면을 보지 않습니다. 첫 번째 텍스트 상자에 첫 번째 스캔 채우기 순서로 두 번째 텍스트 상자를 두 번째 스캔 채우고 필요할 경우 카운트를 채 웁니다.
추가 정보 :
하단 부분 (DataView를)는 이전의 스캔을 보여주기위한 임시 테이블입니다하지만 우리 나중에 있음을 알 수 있습니다. 가장 중요한 부분은 스캔을 가져와 그 (것)들과 무언가를 할 수 있다는 것입니다.
스캔은 keyboardwedge가 될 것입니다. (끝에서 Enter 키와 같은 문자를 전송합니다.) 나중에이 프로그램을 백그라운드에서 실행할 수 있도록 시리얼 COM 포트를 만들 계획입니다.
참고 : 나는 현재의 작은 문제에 대해서는 필요가 없지만 명확 해지기를 원하는 많은 세부 사항을 제공했습니다.
<Window x:Class="ScanningV2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="700">
<DockPanel LastChildFill="True">
<Grid x:Name="LayoutRoot" DockPanel.Dock="Top" Height="100" Background="#FFFFFF" Margin="2,2,2,2">
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Content="Scan" Grid.ColumnSpan="1" Margin="2,2,2.2,2" />
<Label Content="Operator Barcode" Grid.Column="1" HorizontalAlignment="Left" Margin="50,20,0,0" VerticalAlignment="Top" Width="120" />
<Label Content="MO/Task Barcode" Grid.Column="1" HorizontalAlignment="Left" Margin="200,20,0,0" VerticalAlignment="Top" Width="120" />
<Label Content="Quantity" Grid.Column="1" HorizontalAlignment="Left" Margin="350,20,0,0" VerticalAlignment="Top" Width="120" />
<TextBox Grid.Column="1" HorizontalAlignment="Left" Margin="50,50,0,0" TextWrapping="Wrap" Text="Scan" VerticalAlignment="Top" Height="20" Width="120" />
<TextBox Grid.Column="1" HorizontalAlignment="Left" Margin="200,50,0,0" TextWrapping="Wrap" Text="Scan" VerticalAlignment="Top" Height="20" Width="120" />
<TextBox Grid.Column="1" HorizontalAlignment="Left" Margin="350,50,0,0" TextWrapping="Wrap" Text="Scan" VerticalAlignment="Top" Height="20" Width="120" />
<!-- <ListView Grid.Row="0" Grid.Column="1" x:Name="curScans" Background="Aqua" Grid.ColumnSpan="1" Margin="1.8,0,-0.4,0">
<ListView.View>
<GridView>
<GridViewColumn Header="Scanner" DisplayMemberBinding="{Binding Path=curScanNum}" Width="150" />
<GridViewColumn Header="Operator" DisplayMemberBinding="{Binding Path=curOperator}" Width="200" />
<GridViewColumn Header="Task" DisplayMemberBinding="{Binding Path=curTask}" Width="200"/>
</GridView>
</ListView.View>
</ListView> -->
</Grid>
<ListView x:Name="pastScans" Background="#2FFFFFFF" DockPanel.Dock="Bottom">
<ListView.View>
<GridView>
<GridViewColumn Header="Scanner" DisplayMemberBinding="{Binding Path=ScannerNum}" Width="100" />
<GridViewColumn Header="Operator barcode" DisplayMemberBinding="{Binding Path=Operator}" Width="150" />
<GridViewColumn Header="MO/Task barcode" DisplayMemberBinding="{Binding Path=Task}" Width="150" />
<GridViewColumn Header="Date" DisplayMemberBinding="{Binding Path=ScanDate}" Width="100" />
<GridViewColumn Header="Time" DisplayMemberBinding="{Binding Path=ScanTime}" Width="100" />
<GridViewColumn Header="Quantity" DisplayMemberBinding="{Binding Path=Quantity}" Width="100" />
</GridView>
</ListView.View>
</ListView>
</DockPanel>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ScanningV2
{
class scan
{
//Member variables
private string operatorCode;
public string OperatorCode
{
get { return operatorCode; }
set { operatorCode = value; }
}
private string taskCode;
public string TaskCode
{
get { return taskCode; }
set { taskCode = value; }
}
private int count;
public int Count
{
get { return count; }
set { count = value; }
}
private DateTime scanDateTime;
public DateTime ScanDateTime
{
get { return scanDateTime; }
set { scanDateTime = value; }
}
//Default Constructor
public scan()
{
operatorCode = null;
taskCode = null;
count = 0;
}
//Overload Constructor
public scan(string OperCode, string TaskMOCode, int CountNum)
{
operatorCode = OperCode;
taskCode = TaskMOCode;
count = CountNum;
}
}
}
스캔 클래스는 INotifyPropertyChanged에서 상속해야하며 각 인스턴스는 관찰 가능한 컬렉션에 있어야합니다. VM에서 생성되고 ListView 컨트롤의 항목 소스 속성에 바인딩되어야하는 관찰 가능한 컬렉션입니다. 스 니펫을 생성하는 C# 속성을 가져 오면 '스캔'클래스 리팩토링과 관련하여 수명을 절약 할 수 있습니다. –