ich so viele Stunden, dieses Problem zu lösen versuchen:wpf C# verbindlicher Datenstring mit Eigenschaft von Viewmodel-Objekt setzen
I Benutzer individuelle Steuerung des Netzes NewMazeGrid
genannt habe, und ich will es als Kontrolle verwenden, in MainWindow
. MainWindow
enthält MazeViewModel
(mazeVM-Mitglied).
Ich versuche, die Werte des Rasters festzulegen, wenn sich die Eigenschaft MazeViewModel:MySingleplay
ändert. (. Ich bin die INotifyPropertyChanged
dafür verwenden, und es funktioniert völlig in Ordnung, ich denke, das Problem ist in der endgültigen Bindung) Der Code:
Dies ist die Eigenschaft MazeViewModel:MySingleplay
Getter:
public string MySingleplay
{
get
{
if (myModel.MySingleplay == null)
{
return "";
} else
{
return myModel.MySingleplay.ToString();//works perfect
}
}
}
ist dies die NewMazeGrid.xaml.cs
:
namespace VisualClient.View.controls
{
public partial class NewMazeGrid : UserControl
{
private MazePresentation myMaze;
private string order; //dont really use it
//Register Dependency Property
public static readonly DependencyProperty orderDependency =
DependencyProperty.Register("Order", typeof(string), typeof(NewMazeGrid));
public NewMazeGrid()
{
myMaze = new MazePresentation();
InitializeComponent();
DataContext = this;
lst.ItemsSource = myMaze.MazePuzzleLists;
}
public string Order
{
get
{
return (string)GetValue(orderDependency);
}
set
{
SetValue(orderDependency, value);
myMaze.setPresentation(value); //(parsing string into matrix)
}
}
}
}
dies die MainWindow.xaml.cs
:
public partial class MainWindow : Window
{
private MazeViewModel mazeVM;
public MainWindow()
{
InitializeComponent();
mazeVM = new MazeViewModel(new ClientMazeModel(new TCPClientConnection()));
DataContext = mazeVM;
mazeVM.connectToServer();
}
private void bu_Click(object sender, RoutedEventArgs e)
{
bool isC = mazeVM.isConnected();
mazeVM.openSingleplayGame("NewMaze");//works perfect
}
ist dies die MainWindow.xaml
:
<Window x:Class="VisualClient.View.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:Controls ="clr-namespace:VisualClient.View.controls"
xmlns:vm ="clr-namespace:VisualClient.ViewModel"
xmlns:local="clr-namespace:VisualClient.View"
mc:Ignorable="d"
Title="Main Window" Height="350" Width="525" MinWidth="900" MinHeight="600">
<WrapPanel >
<Button Name ="bu" Content="Click_Me" Click="bu_Click"/>
<Grid Name="myGrid">
<Controls:NewMazeGrid Order="{Binding MySingleplay, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</WrapPanel>
</Window>
ich diesen Fehler an der Bindelinie: Wert nicht null sein kann.
Zusammengefasst: Es das Fenster in der Ctor fein initialisieren, aber wenn die Eigenschaft ändert es nicht in die Order-Eigenschaft Setter bekommen. deshalb ändert sich mein Raster nie.
Was sollte die richtige Syntax für die Bindung in diesem Fall sein? Wie binde ich es an die richtige Eigenschaft?
Nicht sicher über die Bindungs Fehler aber dafür, warum Ihr Setter nicht Look genannt wird [hier] (http: //stackoverflow.com/a/3836123/1454658) –
Danke! kommt aber immer noch nicht mal in den MySingleplay property getter – OfKo