空对象模式的主要目标是确保向客户端提供可用的对象。所以我们想替换以下代码......
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
if (m_A != null) {
m_A.Method();
} else {
// assert or log the error
}
}
Run Code Online (Sandbox Code Playgroud)
...通过这个实现:
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
m_A.Method();
}
Run Code Online (Sandbox Code Playgroud)
我想到的问题是 GetObject() 仍然返回一个对象、NULL 对象或其他对象。我喜欢不重复检查 null 并相信发送回的对象可用的想法,但为什么我不在第一个实现中这样做呢?
空对象模式的优点只是稍微增加了清理代码的信任吗?对于第二个实现,在调用 A.Method() 之前检查它是否不为 null 不是一个好习惯吗?
基本上我想按照标题说的那样做,如果列宽为.50那么矩形应该是红色,如果它是.75那么它应该是琥珀色,如果是1则那么它应该是绿色.
我以为我可以使用DataTriggers实现这一点但由于某种原因我得到"对象引用未设置为对象的实例"错误,这是我的代码,我在这里遗漏了什么?
FYI width属性将在后端通过timer_tick事件更改.
<Grid x:Name="Grid1" Width="300" Height="30">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="MyColumn1" Width=".50*"></ColumnDefinition>
<ColumnDefinition x:Name="MyColumn2" Width=".50*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.Triggers>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".50*">
<Setter TargetName="rect" Property="Fill" Value="Red"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value=".75*">
<Setter TargetName="rect" Property="Fill" Value="Yellow"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=MyColumn1,Path=Width}" Value="1">
<Setter TargetName="rect" Property="Fill" Value="Green"></Setter>
</DataTrigger>
</Grid.Triggers>
<Rectangle x:Name="rect" Grid.Column="0" HorizontalAlignment="Stretch"></Rectangle>
<Rectangle Grid.Column="1" Fill="Blue"></Rectangle>
</Grid>
Run Code Online (Sandbox Code Playgroud) 我用反射器进行搜索,但没有找到一种ValidationResult.MemberNames应该包含多个值的情况。
所以,首先我想知道为什么 MS 必须这样做IEnumerable<string>,那么既然他们已经这样做了,我可以相信这个属性只会返回一个值吗?
关于 DataAnnotations 验证系统的更新我发现更多的马虎:
TryValidateProperty则 和应该已从validationResultsTryValidateObject参数中删除错误。而这样的例子不胜枚举。
真的让我的大脑陷入困境,我确信这很简单,我很想念.
基本上我有一个带有两个标签的表单.我正在检查每个选项卡上的控件,看它们是否脏,并且如果当前选项卡上有更改,则希望阻止用户单击选项卡.
我曾经想过,如果我检查脏变量并将选项卡索引设置为未被选中的那个我就没事了但是每次我以编程方式设置选项卡的属性时,它会触发一大堆选项卡的事件产生不希望的结果,例如显示正确的控制集但选择了错误的选项卡.
这是我尽可能接近它的代码.
Private Sub objTabs_Selected(ByVal sender As Object, ByVal e As System.Windows.Forms.TabControlEventArgs) Handles objTabs.Selected
If bIsDirty Then
If Me.objTabs.SelectedIndex = 1 Then
Me.objTabs.SelectedTab = tabLetterofCreditBanks
Me.objTabs.SelectTab(0)
Else
Me.objTabs.SelectedTab = tabWireTransferBanks
Me.objTabs.SelectTab(1)
End If
End If
End Sub
Run Code Online (Sandbox Code Playgroud)
提前致谢.
我有一个Item由3列组成的表:
ItemId int PK
RoomId int FK
UnitId int FK
Cost money
Run Code Online (Sandbox Code Playgroud)
我想要一个DataGrid/ListView具有动态生成的列和行,代表以下pivot:
Room1 Room2 Room3 Room4
Unit1 $34 $72 $48 $98
Unit2 $64 $56 $67 $24
Unit3 $24 $34 $34 $34
Run Code Online (Sandbox Code Playgroud)
我更喜欢控制或帮助现有的而不是脏功能,因为我需要这个场景很多,但任何事情都是热烈欢迎的.
我希望有Room1和Unit1等作为行和列标题,并相应地设置生成/细胞.
是否有一个很好的方法(除了重新整理TreeViewItem.Template)以禁用选择TreeView?
我基本上寻找的ItemsControl风格TreeView(An ItemsControl是最好用'禁用'选择ListBox,阅读这篇文章)
我想用VB.NET替换C#属性,这意味着[Serializable]应该成为<Serializable>.
该模式(\[)(.+)(\])确实找到了结果,但我不知道如何用适当的括号替换第一组和最后一组.
我读了这个页面,但是我不明白如何使用大括号进行F&R,我试图用它包装组但是它不起作用.
我希望能够确定枚举值是否属于某个组.看到伪示例:
[Flags]
public enum Animals
{
Dog = 1,
Cat = 2,
WildAnimal = Dog | Cat,
Fly = 4,
Bee = 8,
Insect = Fly | Bee
}
public static bool IsInsect(Animals animals)
{
return Animals.Insect.Qualifies(animals);
}
public static bool Qualifies(this Animals groupName, Animals value)
{
//Is there a bitwise operation for it?
}
Run Code Online (Sandbox Code Playgroud) 我需要检查用户的输入是否是有效的CSS语法(输入字符串基本上是一个CSS文件).它可以包含类,选择器!important等.
我没有开始研究它,因为我希望已经有一些正则表达式语法,所以我不必从头开始.
我尝试使用谷歌搜索,但我发现的是部分css匹配字符串,而不是验证所有可能的CSS的正则表达式.
wpf ×3
regex ×2
validation ×2
vb.net ×2
.net ×1
c# ×1
c++ ×1
css ×1
css3 ×1
datagrid ×1
datatrigger ×1
enums ×1
itemscontrol ×1
listview ×1
null ×1
object ×1
pivot-table ×1
replace ×1
selection ×1
styles ×1
treeview ×1
vb.net-to-c# ×1
winforms ×1
xaml ×1