Οντας σχετικά καινούριος στο WPF, από καιρού εις καιρόν αντιμετωπίζω κάποια ζητηματάκια τα οποία με προβληματίζουν. Ιδού ένα από αυτα:
Σε ενα dialog window, εχουμε τα εξης:
#Region "Properties"
Public Property PiecesW As String
Public Property PiecesH As String
Public Property ImagePath As String
#End Region
Και ο constructor...
Public Sub New()
InitializeComponent()
PiecesW = "8"
PiecesH = "6"
ImagePath = ""
DataContext = Me
End Sub
Η ImagePath γινεται bind σε ενα textbox ως εξης:
<TextBox x:Name="ImagePathText" Height="16"
VerticalAlignment="Top"
Margin="36,2,46,0"
Style="{StaticResource FlatTextBoxStyle}">
<TextBox.Text>
<Binding Path="ImagePath"
UpdateSourceTrigger="PropertyChanged"
ValidatesOnDataErrors="True"
NotifyOnValidationError="True"
Mode="TwoWay">
<Binding.ValidationRules>
<val:ImgPathValidator ValidatesOnTargetUpdated="True"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Και τέλος, σε ένα button...
Private Sub LoadImageButton_Click(sender As System.Object,
e As System.Windows.RoutedEventArgs) _
Handles LoadImageButton.Click
'Show a dialog to select image
Dim oDlg As New OpenFileDialog
With oDlg
.Title = "Select Image"
.Filter = "Bitmap Files (*.bmp)|*.bmp|" &
"JPEG Files (*.jpg,*.jpeg)|*.jpg;*.jpeg|" &
"GIF Files (*.gif)|*.gif|" &
"PNG Files (*.png)|*.png|" &
"All Image Formats (*.bmp,*.jpg,*.jpeg,*.gif,*.png)|" &
"*.bmp;*.jpg;*.jpeg;*.gif;*.png"
.FilterIndex = 2
If .ShowDialog = True Then
ImagePath = .FileName
End If
End With
End Sub
Προβλημα: όταν αλλάζω την ImagePath μέσω της παραπάνω ρουτίνας, η τιμη δεν εμφανίζεται στο textbox. Δεν θα έπρεπε, αφου το binding είναι - λογικά - TwoWay ; Αν οχι, τι ακριβως γίνεται; Πως λύνω το θέμα (καλά, θα μπορούσα να πω ImagePathText.Text=.FileName και να λήξει εκεί η ιστορία);