使用ValueConverter绑定到另一个窗口中的对象

时间:2012-07-23 14:36:01

标签: c# wpf binding visibility ivalueconverter

我有一个主程序窗口,底部有一排快捷按钮。我正在尝试通过使用Visibility的单独Settings窗口使这些CheckBoxes可选,然后将该状态存储在程序的UserSettings中,以便在打开时再次记住以前的设置。我找到并使用IValueConverter来实现这一点,我知道Setting已保存,因为CheckBox本身保留了它的值。

问题是点击CheckBox不会影响按钮的Visibility。它在Settings窗口本身内工作,但我似乎无法弄清楚如何使它在不同的窗口之间工作。

我尝试过同时实施UpdateSourceTrigger& NotifyOnSourceUpdated标志无济于事。任何人都可以看到问题吗?

主窗口XAML

<WrapPanel.Resources>
            <main:BooleanToHiddenVisibility x:Key="boolToVis" />
</WrapPanel.Resources>
<ToggleButton Name="alwaysOnTop" Checked="alwaysOnTop_Checked"
    Style="{StaticResource ShortcutToggleStyle}" Unchecked="alwaysOnTop_Unchecked"
    Visibility="{Binding Source=main:Properties.Settings.Default, Path=pinShow, Converter={StaticResource boolToVis}, Mode=TwoWay}" >
        <Image SnapsToDevicePixels="True" Source="Images/pushpin.png"
             ToolTip="Always on Top" />
</ToggleButton>

设置窗口XAML

<CheckBox Name="pinDisable" Grid.Column="0" Grid.Row="1" HorizontalAlignment="Center"
    IsChecked="{Binding Source={x:Static main:Properties.Settings.Default}, Path=pinShow, Mode=TwoWay}"
    Checked="pinDisable_Checked" Unchecked="pinDisable_Unchecked"/>

转换代码背后

public class BooleanToHiddenVisibility : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Visibility rv = Visibility.Visible;
        try
        {
            var x = bool.Parse(value.ToString());
            if (x)
            {
                rv = Visibility.Visible;
            }
            else
            {
                rv = Visibility.Collapsed;
            }
        }
        catch (Exception)
        {

        }
        return rv;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }
}

0 个答案:

没有答案