私は非常に使い方と実装の仕方を混同していますが、特定のグリッドを変更するとEnumプロパティに基づいています。WPF DataTemplate、TemplateSelectors、ContentPresenter SelectedItemに基づいて
現在、私は20グリッドのように、プロパティが変更されたときに可視性を利用しています。 これは2つの事柄には理想的ではありません。すべての20のグリッドは起動時にバインドされ、パフォーマンスは良好ではありません。第2に、いくつかの "グリッド"はenumプロパティのいくつかの値で同じです。だから私はいくつかのグリッドでコードを重複している。
は、今、私が持っているもの列挙型です:
Public class MyObject
{
private Enums.MyEnumsForDropDown _myChosenEnum;
public Enums.MyEnumsForDropDown MyChosenEnum
{
get { return _myChosenEnum; }
set
{
_myChosenEnum = value;
this.NotifyPropertyChanged(x => x.MyChosenEnum);
}
}
}
私のXAML::私がバインド私のViewModelで
public enum MyEnumsForDropDown
{
Enum1= 1,
Enum2= 2,
Enum3= 3,
Enum4= 4,
Enum5= 5
}
私のオブジェクトは、のためである
どう<ComboBox ItemsSource="{Binding CollectionOfEnums}"
DisplayMemberPath="Value" SelectedValuePath="Key" SelectedValue="{Binding
MyObject.MyChosenEnum}"></ComboBox>
<Grid Grid.Row="1" Grid.Column="3" Visibility="{Binding
Path=MyObject.MyChoseEnum, Converter={StaticResource
EnumToVisibleCollapseConverter}, ConverterParameter={x:Static
myenumsNameSpace:Enums+MyEnumsForDropDown.Enum1}}">
<TextBlock Content"This Grid displays when Enum1 is chosen"/>
</Grid>
<Grid Grid.Row="1" Grid.Column="3" Visibility="{Binding
Path=MyObject.MyChoseEnum, Converter={StaticResource
EnumToVisibleCollapseConverter}, ConverterParameter={x:Static
myenumsNameSpace:Enums+MyEnumsForDropDown.Enum2}}">
<TextBlock Content"This Grid displays when Enum2 is chosen"/>
</Grid>
どうやらContentPresentersやDataTemplatesのように動作するようにグリッドを変更するか、またはMyChoプロパティ私のオブジェクトのsenEnumの変更??
このようなアプローチの欠点は、すべてのグリッドがビジュアルツリーにあることです(dis可視性に関して)、いくつかのパフォーマンスを拘束し、食べることに参加する。代わりに、データトリガーを使用して単一要素の制御テンプレートを変更することができます。複雑なケースでは複数のデータトリガーがあります。 [チュートリアル](http://www.wpf-tutorial.com/styles/multi-triggers-multitrigger-multidatatrigger/)を参照してください。 – Sinatr