绑定时的情况会自动分离

时间:2010-08-05 13:29:47

标签: .net wpf data-binding binding

今天我遇到了一个问题,它提醒我在某些情况下绑定会自动分离。我不确定,但这是情景 -

我附加一个绑定到属性的菜单项(实现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

4 个答案:

答案 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>