我要做的是在我的(xaml)控件资源中创建一个变量,并将其绑定到我的DataContext上的属性(例如ViewModel)。
我愿意加入我的<system:Boolean x:Key="MyVariable" Value={Binding MyDataContextProperty}/>
,就像这样
MyVariable
我知道这是更优雅的方法,例如向DataContext声明public interface InterviewQuestion
{
int Method(int[] a, int[] b);
int Alternative(int[] a, int[] b);
bool Test();
}
(例如ViewModel)并从那里使用它。但是出于测试原因,我想探索上述方面。
这甚至可能吗?
答案 0 :(得分:1)
'Binding'只能在DependencyObject的DependencyProperty上设置。
所以不,<system:Boolean x:Key="MyVariable" Value={Binding MyDataContextProperty}/>
无效
可以在参考资料
中声明一个常量bool值<StackPanel>
<StackPanel.Resources>
<system:Boolean x:Key="varBool">
True
</system:Boolean>
</StackPanel.Resources>
<CheckBox IsChecked="{StaticResource varBool}"/>
</StackPanel>
也可以创建一个特殊的DependencyObject
public class SomeObj: DependencyObject
{
public static DependencyProperty ValueProperty =
DependencyProperty.Register("Value", typeof (bool), typeof (SomeObj),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public bool Value
{
get { return (bool)GetValue(ValueProperty); }
set { SetValue(ValueProperty, value); }
}
}
绑定将起作用
<StackPanel>
<StackPanel.Resources>
<local:SomeObj x:Key="varBool1" Value="True"/>
<local:SomeObj x:Key="varBool2" Value="{Binding Value, Source={StaticResource varBool1} }"/>
</StackPanel.Resources>
<CheckBox IsChecked="{Binding Value, Source={StaticResource varBool1}}"/>
<CheckBox IsChecked="{Binding Value, Source={StaticResource varBool2}}"/>
</StackPanel>
主要问题是为什么如果已经有MyDataContextProperty
?