연결, 연결 해제 및 보류중인 3 개의 응용 프로그램이 있습니다. 통신 상태는 다른 일부 매개 변수에 의해 제어됩니다. IValueConverter에 의해 제어되는 화면에 해당 이미지를 표시하고 싶습니다. 그러나 나는 그것을 작동시키지 못한다.IValueConverter 및 가시성
public class CommunitationStateToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var result = Visibility.Collapsed;
if ((string)parameter == "ConverterParameterConnected")
result = (CommunitationState)value == CommunitationState.Connected ? Visibility.Visible : Visibility.Collapsed;
if ((string)parameter == "ConverterParameterDisconnected")
result = (CommunitationState)value == CommunitationState.Disconnected ? Visibility.Visible : Visibility.Collapsed;
if ((string)parameter == "ConverterParameterPending")
result = (CommunitationState)value == CommunitationState.Pending ? Visibility.Visible : Visibility.Collapsed;
Debug.WriteLine("value={0}, parameter={1}, result={2}", value, (string)parameter, result);
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
: 여기
<Image x:Name="connectedImage"
Visibility="{Binding ConnectionWithServerEstablished, Converter={StaticResource communitationStateToVisibilityConverter}, ConverterParameter=ConverterParameterConnected}"
Source="Assets/connected.png"
Stretch="None"
HorizontalAlignment="Center" />
<Image x:Name="disconnectedImage"
Visibility="{Binding ConnectionWithServerEstablished, Converter={StaticResource communitationStateToVisibilityConverter}, ConverterParameter=ConverterParameterDisconnected}"
Source="Assets/disconnect.png"
Stretch="None"
HorizontalAlignment="Center" />
<Image x:Name="pendingImage"
Visibility="{Binding ConnectionWithServerEstablished, Converter={StaticResource communitationStateToVisibilityConverter}, ConverterParameter=ConverterParameterPending}"
Source="Assets/pending.png"
Stretch="None"
HorizontalAlignment="Center" />
이
public enum CommunitationState { Connected, Disconnected, Pending }
public CommunitationState ConnectionWithServerEstablished
{
get
{
if (IRCommandSent)
return CommunitationState.Disconnected;
if (wifiConnected && !fcConnected)
return CommunitationState.Pending;
return wifiConnected ? CommunitationState.Connected : CommunitationState.Disconnected;
}
}
그리고 마지막으로 컨버터를 CommunitationState
제어 Methos는 다음과 같습니다을 Heres는 3 개 이미지 광고 등의 내 XAML 코드 데이터 바인딩은 예상대로 작동합니다. 나는 확실히 텍스트 상자를 텍스트로 상태를 표시하는 다른 메서드에 묶어 놓았습니다. 내 컨버터가 호출되면, 나는 그것에 브레이크 포인트를 둘 수 있기 때문에 확실히 알고있다.
그래서 내 변환기에는 항상 잘못된 것이 있습니다. 왜냐하면 나는 항상 붕괴 된 이미지로 끝나기 때문입니다.
value=Connected, parameter=ConverterParameterConnected, result=Visible
value=Connected, parameter=ConverterParameterDisconnected, result=Collapsed
value=Connected, parameter=ConverterParameterPending, result=Collapsed
I 보류로 변경 :
value=Pending, parameter=ConverterParameterConnected, result=Collapsed
value=Pending, parameter=ConverterParameterDisconnected, result=Collapsed
value=Pending, parameter=ConverterParameterPending, result=Visible
는 **** 여기에 편집 ****
내가 연결 시작
제의 Debug.WriteLine에서 일부 출력
시작 대기 중 :
value=Connected, parameter=ConverterParameterConnected, result=Visible
value=Connected, parameter=ConverterParameterDisconnected, result=Collapsed
value=Connected, parameter=ConverterParameterPending, result=Collapsed
value=Pending, parameter=ConverterParameterConnected, result=Collapsed
value=Pending, parameter=ConverterParameterDisconnected, result=Collapsed
value=Pending, parameter=ConverterParameterPending, result=Visible
내 프로그램이 기본적으로 연결되어 있고 잠시 후에 TCP 서버를 볼 수는 없지만 Wifi에 대한 액세스 권한이 있으므로 계속 상태가 보류 중으로 변경되기 때문에 이는 맞습니다.
Visibility = Visible을 바인딩 대신 XAML에 넣으면 이미지가 표시됩니까? 또한 디버거를 사용하여 가치 변환기를 단계별로 실행하십시오. – helb
나는 그것을 시도한 havent, 내가 하드 코드를 Visibility.Visible 반환하고 이미지를 표시하려고 노력했다. –
Convert() 내에서 디버거가 표시하는 매개 변수 값은 무엇입니까? – helb