有谁知道我怎么可以强制CanExecute
调用自定义命令(约什史密斯RelayCommand
)?
通常,CanExecute
只要在UI上发生交互,就会调用它.如果我点击某些内容,我的命令会更新.
我有一种情况,CanExecute
即幕后的计时器打开/关闭条件.因为这不是由用户交互驱动的,CanExecute
所以在用户与UI交互之前不会调用.最终结果是我的Button
保持启用/禁用,直到用户点击它.点击后,它会正确更新.有时Button
显示已启用,但是当用户单击它时,更改为禁用而不是触发.
当计时器更改影响的属性时,如何强制更新代码CanExecute
?我对影响的属性尝试了kick PropertyChanged
(INotifyPropertyChanged
)CanExecute
,但这没有帮助.
示例XAML:
<Button Content="Button" Command="{Binding Cmd}"/>
Run Code Online (Sandbox Code Playgroud)
后面的示例代码:
private ICommand m_cmd;
public ICommand Cmd
{
if (m_cmd == null)
m_cmd = new RelayCommand(
(param) => Process(),
(param) => EnableButton);
return m_cmd;
}
// Gets updated from a timer (not direct user interaction)
public bool EnableButton { get; set; }
Run Code Online (Sandbox Code Playgroud) 是否有人注意到带有ElementName的Bindings无法正确解析MenuItem
对象中包含的ContextMenu
对象?看看这个样本:
<Window x:Class="EmptyWPF.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300"
x:Name="window">
<Grid x:Name="grid" Background="Wheat">
<Grid.ContextMenu>
<ContextMenu x:Name="menu">
<MenuItem x:Name="menuItem" Header="Window" Tag="{Binding ElementName=window}" Click="MenuItem_Click"/>
<MenuItem Header="Grid" Tag="{Binding ElementName=grid}" Click="MenuItem_Click"/>
<MenuItem Header="Menu" Tag="{Binding ElementName=menu}" Click="MenuItem_Click"/>
<MenuItem Header="Menu Item" Tag="{Binding ElementName=menuItem}" Click="MenuItem_Click"/>
</ContextMenu>
</Grid.ContextMenu>
<Button Content="Menu"
HorizontalAlignment="Center" VerticalAlignment="Center"
Click="MenuItem_Click" Tag="{Binding ElementName=menu}"/>
<Menu HorizontalAlignment="Center" VerticalAlignment="Bottom">
<MenuItem x:Name="anotherMenuItem" Header="Window" Tag="{Binding ElementName=window}" Click="MenuItem_Click"/>
<MenuItem Header="Grid" Tag="{Binding ElementName=grid}" Click="MenuItem_Click"/>
<MenuItem Header="Menu" Tag="{Binding ElementName=menu}" Click="MenuItem_Click"/>
<MenuItem Header="Menu Item" Tag="{Binding ElementName=anotherMenuItem}" Click="MenuItem_Click"/>
</Menu>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
除了ContextMenu中包含的绑定之外,所有绑定都很有效.它们在运行时将错误输出到"输出"窗口.
有谁知道任何工作?这里发生了什么?
鉴于您有一个触发命令的控件:
<Button Command="New"/>
Run Code Online (Sandbox Code Playgroud)
如果用户双击命令,有没有办法阻止命令被触发两次?
编辑:在这种情况下重要的是我在WPF中使用命令模型.
看来按下按钮时,执行命令.除了禁用或隐藏按钮之外,我没有看到任何阻止这种情况的方法.
我正在尝试使用ConfigurationManager将用户设置保留到配置文件中.
我想将这些设置仅限于用户,因为没有管理员权限,无法在Vista/Win 7上保存应用程序更改.
这似乎得到了用户的配置,它似乎保存在Win 7中([Drive]:\ Users\[Username]\AppData\Local\[ApplicationName]\[AssemblyName] [hash]\[Version \]
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
Run Code Online (Sandbox Code Playgroud)
每当我尝试将任何更改保存到此配置时,我都会遇到以下异常:
InnerException: System.InvalidOperationException
Message="ConfigurationSection properties cannot be edited when locked."
Source="System.Configuration"
StackTrace:
at System.Configuration.SectionInformation.VerifyIsEditable()
at System.Configuration.MgmtConfigurationRecord.GetConfigDefinitionUpdates(Boolean requireUpdates, ConfigurationSaveMode saveMode, Boolean forceSaveAll, ConfigDefinitionUpdates& definitionUpdates, ArrayList& configSourceUpdates)
Run Code Online (Sandbox Code Playgroud)
我尝试将自定义ConfigurationSection添加到此配置中.我已经尝试添加到AppSettingsSection.每当我调用config.Save()
它时抛出上面的异常.
有任何想法吗?
我尝试通过Project-> Settings设计器使用ApplicationSettingsBase类,但似乎不能保存自定义类型.我想要类似的功能,能够保存自定义类型.
我正在尝试在Windows 8中使用MEF.
为了构建我AssemblyCatalog
的容器,我需要一个对程序集的引用.在过去,我会这样做:
var catalog = new AssemblyCatalog(typeof(App).Assembly);
Run Code Online (Sandbox Code Playgroud)
神秘地,物体Assembly
不再存在于Type
物体上.有人知道好的工作吗?有没有另一种方法来获得组装?我可以使用加载它Assembly.Load
,但我需要程序集的名称.我不能从类型中得到那个.
使用DirectoryCatalog
可能的备用?我不喜欢这个主意,但我会做我需要的.
我们有一个名为ScrollContainer的React组件,当它的内容滚动到底部时调用prop函数.
基本上:
componentDidMount() {
const needsToScroll = this.container.clientHeight != this.container.scrollHeight
const { handleUserDidScroll } = this.props
if (needsToScroll) {
this.container.addEventListener('scroll', this.handleScroll)
} else {
handleUserDidScroll()
}
}
componentWillUnmount() {
this.container.removeEventListener('scroll', this.handleScroll)
}
handleScroll() {
const { handleUserDidScroll } = this.props
const node = this.container
if (node.scrollHeight == node.clientHeight + node.scrollTop) {
handleUserDidScroll()
}
}
Run Code Online (Sandbox Code Playgroud)
this.container
在render方法中设置如下:
<div ref={ container => this.container = container }>
...
</div>
Run Code Online (Sandbox Code Playgroud)
我想用Jest + Enzyme测试这个逻辑.
我需要一种方法来强制clientHeight,scrollHeight和scrollTop属性成为我为测试场景选择的值.
使用mount而不是浅,我可以获得这些值,但它们始终为0.我还没有找到任何方法将它们设置为非零值.我可以设置容器wrapper.instance().container = { scrollHeight: 0 }
等等,但这只会修改测试上下文而不是实际组件.
任何建议,将不胜感激!
我试图在更改DataContext后立即测量对象,但对象的绑定不会很快得到更新.这是我的代码:
// In MeasureOverride(Size)
m_inputWidth = 0.0;
Size elemSize = new Size(double.PositiveInfinity, RowHeight);
MapElementView ruler = new MapElementView();
// Measure inputs
foreach (MapElementViewModel elem in m_vm.InputElements)
{
ruler.DataContext = elem;
ruler.Measure(elemSize);
m_inputWidth = Math.Max(m_inputWidth, ruler.DesiredSize.Width);
}
Run Code Online (Sandbox Code Playgroud)
我希望View对象的绑定能够更新,以便我可以测量View显示ViewModel所需的大小.我正在重复使用相同的View进行测量,因为我正在虚拟化数据.
有谁知道如何在DataContext更改时强制绑定更新?
请注意,绑定最终会更新.
视图包含一个TextBlock,它是基于ViewModel更改大小的主要元素.我在更改DataContext后立即查看了此元素上的TextProperty的BindingExpression,但调用UpdateTarget()并不能解决问题,BindingExpression.DataItem似乎为null.
编辑:BindingExression的状态是Unattached.诀窍是弄清楚如何附加它.
匿名类型的最佳用例是什么?
在我看来,它们仅在有限的上下文中有用,例如一个类或一个函数.它们很难在这种情况之外使用,因为没有反射,没有人会知道这些类型可用的属性.
我无法理解多播地址的工作原理.
首先,如果我有N个客户端或同行在不同的网络上工作,它们都订阅了相同的组播组,并且该组允许任何源发送消息,这些对等体/主机都可以通过这个相互通信组?(听起来像黑魔法!)
其次,我听说过IANA控制/管理多播地址的提示.那么您是否需要请求/要求IANA为您的项目/公司提供特定的多播地址?这是如何运作的?我错了吗?你能为我澄清一下多播网络吗?
非常感谢!
我正在学习F#.我首先查看了Microsoft 的F#示例.
我跑过这个声明:
let line1,line2 =
use sr = System.IO.File.OpenText @"test.txt"
let line1 = sr.ReadLine()
let line2 = sr.ReadLine()
(line1,line2)
Run Code Online (Sandbox Code Playgroud)
谁能向我解释这个陈述?
这里定义的是什么类型?一个功能?一个元组?
为什么line1
和line2
必须的定义范围内重新定义line1,line2
(let line1 =
... let line2 =
)?
什么是最后一行,(line1, line2)
这与原始定义的类型有什么关系?这是函数返回吗?
"声明"甚至是用于F#中定义的正确单词吗?
谢谢.
.net ×4
c# ×4
wpf ×4
data-binding ×2
contextmenu ×1
double-click ×1
elementname ×1
enzyme ×1
f# ×1
iana ×1
jestjs ×1
let ×1
mef ×1
multicast ×1
mvvm ×1
networking ×1
p2p ×1
reactjs ×1
semantics ×1
settings ×1
syntax ×1
tuples ×1
udp ×1
unit-testing ×1
updating ×1
windows-8 ×1