Avatar billede tdh1309 Juniormester
03. februar 2019 - 20:26 Der er 2 kommentarer

WPF - kan ikke opdatere indhold i mainwindow

Hej
Jeg skal lære WPF, og trods diverse google søgninger og bøger render jeg hovedet mod muren.
Jeg kører visual studio 2017.

Jeg har en yatzygame klasse som dll, den del fungerer fint - og der er da hul igennem til min WPFYatzy applikation.
i første omgang bruger jeg GameName og GameType properties fra min yatzy klasse + metode til at vælge næste GampeType fra en enum:
thisYatzy.GameStatus = thisYatzy.GameStatus.NextAround();

Når jeg starter det hele op, ser det korrekt ud
Mit problem er når diverse properties ændres i mit yatzy objekt, hvordan kommer den opdaterede værdi på skærmen?

<b>mainwindow.xaml</b>
<Window
        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:WPFYatzy"
        xmlns:YatzyGameCL="clr-namespace:YatzyGameCL;assembly=YatzyGameCL" xmlns:Properties="clr-namespace:WPFYatzy.Properties" x:Class="WPFYatzy.MainWindow"
        mc:Ignorable="d"
        Title="Yatzy" Height="450" Width="800">
    <Window.Resources>
        <ObjectDataProvider x:Key="myDataSource" ObjectType="{x:Type YatzyGameCL:YatzyGame}">
        </ObjectDataProvider>
    </Window.Resources>
    <Grid>
        <Button x:Name="btnAddDice" Content="Skift status" HorizontalAlignment="Left" Margin="127,251,0,0" VerticalAlignment="Top" Width="135" Click="Button_Click" Height="67">
        </Button>

        <StackPanel HorizontalAlignment="Left" Height="145" Margin="68,56,0,0" VerticalAlignment="Top" Width="334">
            <Label>Game status:</Label>
            <TextBlock x:Name="txtboxGameStatus" Text="{Binding Source={StaticResource myDataSource}, Path=GameStatus}"/>
            <Label Content="Game name:"/>
            <TextBlock x:Name="txtboxGameName" Text="{Binding Source={StaticResource myDataSource}, Path=GameName}"/>
        </StackPanel>
    </Grid>
</Window>

<b>mainwindow.xaml.cs</b>
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
    {
        public MainWindow()
        {
            InitializeComponent();
            thisYatzy = new YatzyGame();
            this.DataContext = thisYatzy;
        }

        public YatzyGame thisYatzy;
        private void OnInit(object sender, EventArgs e)
        {


        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
           
            thisYatzy.GameDiceCup.AddNewDice(5);
            //txtboxGameStatus.DataContext = thisYatzy.GameDiceCup.NumberOfDices;
            thisYatzy.GameStatus = thisYatzy.GameStatus.NextAround();
            //txtboxGameStatus.DataContext = thisYatzy;
            txtboxGameStatus.ContentStart = thisYatzy.GameStatus;
            //myListBox.DataContext = myDataSet;
        }
    }

}

Håber at I kan hjælpe :-)
Hilsen Thomas
Avatar billede tdh1309 Juniormester
03. februar 2019 - 22:04 #1
Tror jeg endelig fandt noget brugbart: https://www.tutorialspoint.com/wpf/wpf_data_binding.htm

Vender tilbage om det klarer min udfordring 😁
Avatar billede tdh1309 Juniormester
04. februar 2019 - 00:42 #2
Og det var ikke lige den komplette løsning (ovenfor) - desværre.
Som udgangspunkt virkede min kode faktisk (lidt små bugs - men dem havde jeg nok fundet).
Jeg har tilføjet en messagebox:
            tmpString = tmpString + thisYatzy.GameStatus;           
            MessageBox.Show(tmpString);
Og den viser at GameStatus skifter fint fint.
Problemet/ udfordringen er at få "opdateret" mit vindue.
Har googlet lidt forskelligt, men pt. ikke løst.
Men hvis ikke i kommer mig i forkøbet, lurer jeg den jo nok :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB