[Отредактировано 2019-02-23;Я надеюсь, что это правильно, чтобы отредактировать вопрос]
Я полный новичок в WPF и изо всех сил.Я просмотрел множество учебных пособий и т. Д., Но не нашел ответа (насколько я понимаю).
Я создаю игру Yatzy, и сам класс Yatzy сам по себе почти завершен.Теперь я хотел бы добавить графический интерфейс с использованием WPF в класс yatzy.
Благодаря вкладу Реджинальда Блю, отвечающего на v1 моего вопроса.Я работаю над моделью представления.
Марк Уиталл сделал хороший пример , но я не могу перенести его на свои нужды:
Но это также беспокоит меня.Я надеюсь, что поставляемый код является достаточным, если нет - спросите: -)
Похоже, моя модель представления имеет "контакт" с моей моделью.Это супер. Но что касается моего вида, соединяющегося с моей моделью представления, то, похоже, что-то не так.
Что я хотел бы, для начала: 1) Когда поля GameStatus и GameName должны иметь значения по умолчанию из моей модели.До того, как сделать мою модель, это работало нормально, но я все испортил.Я объявляю свой объект thisYatzy в maincontrol.cs (в модели представления).Должен ли я объявить это на уровне app.xaml?2) Когда я нажимаю ShiftState «кнопка», я вызываю свою модель представления для изменения состояния и обновляю представление.Но с точки зрения я не могу назвать модель представления?
Я надеюсь, что я все объяснил, и что кто-то из вас может помочь: -)
VIEW:
app.xalm
<Application x:Class="WPFYatzy.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPFYatzy"
StartupUri="Views/MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
app.xaml.cs
using System;
using System.Collections.Generic;
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 WPFYatzy.Views
{
/// <summary>
/// Interaction logic for Page1.xaml
/// </summary>
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
}
}
mainwindow.xaml
<Window x:Class="MinimalMVVM.Views.ConvertWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Views="clr-namespace:WPFYatzy.Views"
xmlns:ViewModels="clr-namespace:WPFYatzy.ViewModel"
Title="YatzyGame - mainwindow"
MinWidth="300"
ResizeMode="NoResize"
SizeToContent="WidthAndHeight">
<Window.DataContext>
<ViewModels:MainControl/>
</Window.DataContext>
<Views:Page1/>
</Window>
mainwindow.xaml.cs
using System;
using System.Collections.Generic;
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;
using YatzyGameCL;
namespace WPFYatzy
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
//YatzyGame thisYatzy = new YatzyGame();
public MainWindow()
{
//InitializeComponent();
}
private void OnInit(object sender, EventArgs e)
{
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
}
}
page1.xaml
using System;
using System.Collections.Generic;
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 WPFYatzy.Views
{
/// <summary>
/// Interaction logic for Page1.xaml
/// </summary>
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
}
}
page1.xaml.cs
using System;
using System.Collections.Generic;
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 WPFYatzy.Views
{
/// <summary>
/// Interaction logic for Page1.xaml
/// </summary>
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
}
}
}
Viewmodel
ObservableObject.cs
using System.ComponentModel;
namespace WPFYatzy.ViewModel
{
public abstract class ObservableObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChangedEvent(string propertyName)
{
var handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
DelegateCommand.cs
using System;
using System.Windows.Input;
namespace WPFYatzy.ViewModel
{
public class DelegateCommand : ICommand
{
private readonly Action _action;
public DelegateCommand(Action action)
{
_action = action;
}
public void Execute(object parameter)
{
_action();
}
public bool CanExecute(object parameter)
{
return true;
}
#pragma warning disable 67
public event EventHandler CanExecuteChanged { add { } remove { } }
#pragma warning restore 67
}
}
MainControl.cs
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Windows.Input;
using YatzyGameCL;
namespace WPFYatzy.ViewModel
{
class MainControl : ObservableObject
{
private YatzyGame thisYatzy = new YatzyGame();
private string _strGameName;
private string _strGameStatus;
public string GameName
{
get { return _strGameName; }
set
{
_strGameName = value;
RaisePropertyChangedEvent("GameName");
}
}
public string GameStatus
{
get { return _strGameStatus; }
set {
_strGameStatus = value;
RaisePropertyChangedEvent("GameStatus");
}
}
public void ShiftState()
{
thisYatzy.GameStatus.NextAround();
GameStatus = thisYatzy.GameStatus.ToString();
}
}
}
Модель YatzyGameCL.DLL
Способы бытьиспользуется для создания фреймворка "вместе"
- thisYatzy.GameStatus
- thisYatzy.GameName