WPF-XAML névtérben osztály metódust nem látja
2015-07-27T17:56:38+02:00
2015-07-28T15:48:17+02:00
2022-07-19T05:36:39+02:00
Enderpt
Sziasztok!

Belefutottam egy furcsa hibába(?):
Készítettem egy alkalmazást WPF-ben, ami FIX-API kapcsolatot hivatott kezelni; a xaml részben egy egyedi ValidationRule-t szeretnék használni, amit a XAML kód írásakor szépen fel is ajánl, mint létező osztályt, de a szerkesztés befejezése után már azt mondja rá, hogy nem létezik ilyen, illetve a jobb egérgombos menü parancsával is ugyan ez a baja, mi lehet a hiba, mit írtam el?!

A .cs forrás (ValidationRules):

namespace Basilisk.Controls { namespace ValidationRules { public class NotEmptyRule : ValidationRule { public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) { string v = (value as string); if (v.Length == 0) return new ValidationResult(false, "A mező nem lehet üres!"); return new ValidationResult(true, null); } } public class PositiveDecimalRule : ValidationRule { public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) { decimal n = 0; try { string v = (value as string); if (v.Length > 0) n = Decimal.Parse(v); } catch (Exception) { return new ValidationResult(false, "Csak számokat használhatsz"); } if (n <= 0) return new ValidationResult(false, "Nullától nagyobb kell legyen"); return new ValidationResult(true, null); } } public class PositiveIntegerRule : ValidationRule { public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) { int n = 0; try { string v = (value as string); if (v.Length > 0) n = int.Parse(v); } catch (Exception) { return new ValidationResult(false, "Csak egész számot fogad el!"); } if (n <= 0) return new ValidationResult(false, "Csak pozitív számot fogad el!"); return new ValidationResult(true, null); } } } }
Illetve a Controls.cs forrása:

namespace Basilisk.Controls { public class OrderCommands { private static RoutedUICommand cancel; private static RoutedUICommand cancel_replace; static OrderCommands() { cancel = new RoutedUICommand("Cancel Order", "CancelOrder", typeof(OrderCommands)); cancel_replace = new RoutedUICommand("Cancel/Replace Order", "CancelReplace", typeof(OrderCommands)); } static public RoutedUICommand Cancel { get { return cancel; } } static public RoutedUICommand CancelReplace { get { return cancel_replace; } } } }
Ez pedig a XAML kód, ami előbb látja (felajánlja, ahogy elkezdem beírni), de az oldalban már nem létezőnek mondja:

<Grid x:Class="Basilisk.View.OrderView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:ctrl="clr-namespace:Basilisk.Controls" xmlns:r="clr-namespace:Basilisk.Controls.ValidationRules" > ... <TextBox.Text> <Binding Path="OrderQtyString" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay"> <Binding.ValidationRules> <r:PositiveIntegerRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> ... <TextBox.Text> <Binding Path="CustomFixTag" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay"> <Binding.ValidationRules> <r:PositiveDecimalRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> ... <Border.Resources> <ContextMenu x:Key="OrdersContextMenu"> <ContextMenu.CommandBindings> <CommandBinding Command="ctrl:OrderCommands.Cancel" CanExecute="CanCancelExecuteHandler" Executed="CancelCommandHandler"/> <CommandBinding Command="ctrl:OrderCommands.CancelReplace" CanExecute="CanCancelReplaceExecuteHandler" Executed="CancelReplaceCommandHandler"/> </ContextMenu.CommandBindings> <MenuItem Header="Cancel" Command=""/> <MenuItem Header="CancelReplace" Command=""/> </ContextMenu> <Style x:Key="CustomFieldListItemContainerStyle" TargetType="{x:Type ListBoxItem}"> <Setter Property="ContextMenu" Value="{StaticResource OrdersContextMenu}" /> </Style> </Border.Resources> ...
Mutasd a teljes hozzászólást!
A ValidationRule rész nekem működik (lefordul legalábbis), így, ahogy írod. Esetleg próbáld rebuild-elni a projectet, az szükséges lehet.

A Control rész is működik a CommandBinding-ek kiszedése után (hiszen nincs meg a vonatkozó rész).
Mutasd a teljes hozzászólást!

abcd