今天我遇到了一个问题,它提醒我在某些情况下绑定会自动分离。我不确定,但这是情景 -
我附加一个绑定到属性的菜单项(实现INotifyPropertyChanged
),就像这样 -
IsChecked="{Binding Path=DisplayLongUnit, Mode=TwoWay}"
现在在其检查的事件处理程序中,我在检查了这样的条件后更新了它的IsChecked
值 -
If( condition == true){menuItem.IsChecked = true}
现在绑定还会附加还是会丢失? (我记得读到某个地方会丢失它。)
是否存在自动分离绑定的情况?
我在这里提到了一个 -
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/08d6e4c4-47ab-44f3-b19a-c0ab872fb1a8
答案 0 :(得分:7)
关于知道绑定是否已分离:您可以做的是调试绑定。 首先,在XAML中添加诊断命名空间。这是一个关于窗口的示例(为了清楚起见,我删除了其他常用命名空间):
<Window xmlns:diagnostics="clr-namespace:System.Diagnostics;assembly=WindowsBase">
然后在绑定上启用跟踪。这是一个在TextBox的Text属性上设置绑定的示例:
<TextBox Text={Binding FirstName, diagnostics:PresentationTraceSources.TraceLevel=High} />
现在,如果在运行程序时查看Visual Studio的“输出”选项卡,您将看到有关绑定的信息,包括分离时的“ detach ”。
所以这并没有告诉你为什么它是分离的,只有在什么时候。 它可以帮助。
答案 1 :(得分:0)
您是否尝试过双向绑定?
IsChecked="{Binding Path=DisplayLongUnit, Mode=TwoWay}"
答案 2 :(得分:0)
您的问题的更具体示例如下:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/4165daed-2eaf-450b-a082-63d79ff9fd3e
您可能希望以两种方式进行绑定模式(这样您的属性也会更新,我不知道IsChecked的默认值是什么,但最好是明确的)或者只是更改DisplayLongUnit属性而不是IsChecked属性。
答案 3 :(得分:0)
不要忘记将“IsCheckable”设置为true。如果它是假的,则TwoWay绑定将不起作用。以下数据绑定的MenuItem适合我(没有代码隐藏):
<MenuItem Header="Select sense" ItemsSource="{Binding Path=AvailableSenses}" >
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Path=Sense.English}" />
<Setter Property="IsCheckable" Value="True" />
<Setter Property="IsChecked" Value="{Binding Path=IsSelected, Mode=TwoWay}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>