2011-06-15 30 views
1

我已經單選按鈕,我想定義radiobutton.IsChecked狀態和一些StackPanel的,所以我寫了這個轉換方法的可見性之間的綁定:我的綁定轉換有什麼問題?

public class RadioBtnState2Visible : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (bool)value == true ? Visibility.Visible : Visibility.Collapsed; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (Visibility)value == Visibility.Visible ? true : false; 
    } 
} 

我做結合 - 的XAML:

<local:PageEx.Resources> 
     <local:RadioBtnState2Visible x:Key="Convert" /> 
</local:PageEx.Resources> 


<RadioButton x:Name="MyRadioBtn1" GroupName="group1" /> 
<RadioButton x:Name="MyRadioBtn2" GroupName="group1" /> 

    <StackPanel Visibility="{Binding ElementName=MyRadioBtn1, Path=IsChecked, Converter={StaticResource Convert}}" /> 

但沒有任何作品!

堆疊面板的可見性狀態始終可見!

我做錯了什麼?

+0

輸出窗口不幫你?你有沒有試過調試它?轉換器中的斷點? – Snowbear 2011-06-15 13:30:57

+0

我在轉換中添加了斷點 - 它並沒有在那裏停止。 – Yanshof 2011-06-15 13:43:31

+0

這意味着轉換器不會被解僱 – Rohit 2011-06-15 14:26:24

回答

3

讓你的代碼與一個小改動合作。我做了轉換器頁面資源:

<UserControl.Resources> 
    <local:RadioBtnState2Visible x:Key="Convert" /> 
</UserControl.Resources> 

我還要提到的是,我不得不居然把東西在StackPanel中也看到了變化默認情況下它縮短到什麼:)我認爲你確實有內容在你真正的堆棧面板中。


只是爲了解釋這裏發生了什麼。通過將「local:」添加到資源聲明中,您實際上將一個資源的實例包含在內,而不會更改當前資源。通過「轉換」引用它不起作用,因爲它無法找到它希望找到它的資源。

1

這是Silverlight還是WPF?您可能需要指定綁定模式。 Mode = OneWay應該可以工作。

+0

Withj更改爲'轉換'依然不起作用。 – Yanshof 2011-06-15 13:34:47

+0

更新了我的答案以刪除該部分。您可以嘗試指定模式(請參閱答案)。 – 2011-06-15 13:37:45

+0

@雪熊:真的,你說得對。我第一次誤讀了它。 :)生病從我的回答中刪除 – 2011-06-15 13:41:11

0

事實上,RadioButon.IsChecked不是boolNullable<bool>1

所以,你的代碼應該是:

public class RadioBtnState2Visible : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return (value == true) ? Visibility.Visible : Visibility.Collapsed; // the explicit check to true is needed because of case value=null 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return value == Visibility.Visible ; // yup, it's a boolean 
    } 
} 

應該更好地工作。

+0

它根本不工作。仍然沒有看到任何堆棧面板可見性的結果。 – Yanshof 2011-06-15 14:15:36

+0

這是我的第一個想法,但它確實從布爾投下了?正確的布爾。轉換器資源剛被宣佈爲錯誤。如果轉換器完全使用,他將會達到他的斷點。 – 2011-06-15 14:32:58