드롭 다운과 그리드가 있습니다. 그리드 열에 하이퍼 링크가 있습니다. 드롭 다운 컬렉션에 항목이 하나있는 경우 드롭 다운이 보이지 않아야합니다. 항목 컬렉션에 대한 가시성을 바인딩하는 논리가 필요합니다.WPF의 항목 컬렉션에 대한 가시성
다음은 GRid의 하이퍼 링크 하나에 대한 XAML입니다.
<!--Associate-->
<TextBlock Margin="10, 0, 0, 0">
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource courseListVisibilityConverter}"
ConverterParameter="Associate">
<Binding Path="IsCourseAssocited"
RelativeSource="{RelativeSource Mode=FindAncestor,AncestorType={x:Type DPA2:TakenCoursesNotApplied}}" />
<Binding Path="DataContext"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</TextBlock.Visibility>
<Hyperlink DataContext="{Binding}"
Name="Associate"
IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TextBlock}}, Path=IsVisible}"
Click="Associate_Click">
<TextBlock TextWrapping="Wrap"
Text="Associate" />
</Hyperlink>
</TextBlock>
public class CourseListVisibilityConverter : IMultiValueConverter
{
public object Convert(object[] value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null || value[0] == null || value[1] == null) return Visibility.Collapsed;
bool IsEditMode = value[0] == DependencyProperty.UnsetValue ? false : (bool)value[0];
if (value[1].GetType() == typeof(Course))
{
Course course = value[1] as Course;
if (course == null) return string.Empty;
//Visibility retVal = Visibility.Visible;
switch (parameter.ToString())
{
case "CodeLink":
if (!IsEditMode) return Visibility.Collapsed;
if (course.HideOptions) return Visibility.Collapsed;
if (course.IsInElectivePool &&
course.IsManualAdd) return Visibility.Visible;
if (!course.IsInElectivePool &&
!course.IsWaived) return Visibility.Visible;
if (course.IsInElectivePool &&
course.FulFillmentId != 0 &&
course.FulFillmentId != -1 &&
!course.IsWaived) return Visibility.Visible;
return Visibility.Collapsed;
case "CodeNoLink":
if (!IsEditMode) return Visibility.Visible;
if (course.HideOptions) return Visibility.Visible;
if (course.IsInElectivePool &&
course.IsManualAdd) return Visibility.Collapsed;
if (!course.IsInElectivePool &&
!course.IsWaived) return Visibility.Collapsed;
if (course.IsInElectivePool &&
course.FulFillmentId != 0 &&
course.FulFillmentId != -1 &&
!course.IsWaived) return Visibility.Collapsed;
return Visibility.Visible;
case "Waive":
if (course.HideOptions) return Visibility.Collapsed;
if (IsEditMode &&
!course.IsWaived &&
!(course.RetakenFlag == RetakeFlagType.RetakeOfCourse) &&
!course.IsInElectivePool) return Visibility.Visible;
return Visibility.Collapsed;
case "UndoWaive":
if (course.HideOptions) return Visibility.Collapsed;
if (IsEditMode && course.IsWaived &&
!(course.RetakenFlag == RetakeFlagType.RetakeOfCourse) &&
!course.IsInElectivePool) return Visibility.Visible;
return Visibility.Collapsed;
case "UndoAdd":
if (course.HideOptions) return Visibility.Collapsed;
if (IsEditMode && course.IsManualAdd &&
(!(course.RetakenFlag == RetakeFlagType.RetakeOfCourse) &&
!course.IsInElectivePool)) return Visibility.Visible;
return Visibility.Collapsed;
case "Associate":
if (course.HideOptions) return Visibility.Collapsed;
if (IsEditMode && course.IsCourseAssocited)
return Visibility.Collapsed;
else if (IsEditMode &&
((course.Status.ToUpper() == "COMPLETE" || course.Status.ToUpper() == "DROPPED")))
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
//case "UnAssociate":
// if (course.HideOptions) return Visibility.Collapsed;
// if (IsEditMode && (course.IsCourseAssocited))
// {
// return Visibility.Visible;
// }
// else
// {
// return Visibility.Collapsed;
// }
case "FullFillRequirement":
if (course.HideOptions) return Visibility.Collapsed;
if (IsEditMode &&
((course.Status.ToUpper() == "FUTURE")))
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
default:
return Visibility.Collapsed;
}
}
else if (value[1].GetType() == typeof(ElectivePool))
{
ElectivePool electivePool = value[1] as ElectivePool;
if (electivePool == null) return string.Empty;
switch (parameter.ToString())
{
case "Waive":
if (IsEditMode &&
!electivePool.IsWaived) return Visibility.Visible;
return Visibility.Collapsed;
case "UndoWaive":
if (IsEditMode &&
electivePool.IsWaived) return Visibility.Visible;
return Visibility.Collapsed;
}
}
return Visibility.Visible;
}
public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
, 컨버터의 프레젠테이션 모델에있는 컬렉션을 사용할 수 있습니까? – KCS
2. PresentationModel에서 변환기에있는 속성을 사용할 수 있습니다. 모델에서 컬렉션 수를 확인하고 boolena 속성을 업데이트합니다. Converter calss에서 동일한 속성을 사용할 수 있습니까? – KCS
예, 부울 속성을 [BooleanToVisibilityConverter] (http://msdn.microsoft.com/en-us/library/system.windows.controls.booleantovisibilityconverter.aspx)와 함께 사용할 수 있지만 PropertyChanged 알림을 사용하는 것을 잊지 마십시오. [Here] (http://msdn.microsoft.com/en-us/library/ms743695.aspx) 예제입니다. – EugenSoft