我有一個MainView - 它有一個屬性「ViewModel」 - 當我將此ViewModel更改爲不同類型時,我將窗口上的datacontext更新爲特定的viewmodel,然後我使用ContentControl和DataTemplate來更改一些內容 - 這一切都有效。基於視圖模型類型的邊界觸發器不起作用
現在,我嘗試創建一個觸發器來改變邊界的基礎上,視圖模型類型的背景 - 我想出了這一點:
<Border Background="#3f3f3f" CornerRadius="10">
<Border.Style>
<Style TargetType="Border">
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Type viewmodels:AllBeadsViewModel}">
<Setter Property="Background" Value="White"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<StackPanel Orientation="Vertical" VerticalAlignment="Center" Margin="10">
<Image Height="32" Source="/Images/Icons/bookmark-1.png" Margin="0,0,0,5" />
<TextBlock Text="All Beads" VerticalAlignment="Center" Foreground="White" />
</StackPanel>
</Border>
我使用WPF督察,試圖確保該datacontext是正確的(AllBeadsViewModel),並且setter被正確描述 - 所有似乎都匹配。我在這裏做錯了什麼?
如果沒有一個好的[mcve]清楚地表明你正在嘗試做什麼,哪些不起作用,以及你想要什麼,而不能確切知道一個好的答案是什麼。但是,在您發佈的代碼中,您似乎將對象本身與'System.Type'的實例進行比較。除非你的對象是'Type',否則永遠不會成功。也許你想爲綁定寫一個轉換器,它在對象上調用'GetType()'(即將對象轉換爲它的類型)。那麼比較就會有意義。 –
@PeterDuniho謝謝你的回覆。真的很難知道要在這個問題中輸入多少信息。我可以鏈接我的整個源代碼 - 但這隻會造成太多的噪音。 所以我的Window.DataContext是一個類,AllBeadsViewModel或EditBeadViewModel - 基於它是哪一個,我想要一個邊框切換背景色。所以是的,我正在檢查類型。我明白你的觀點。所以我做了一個轉換器。首先我嘗試了匹配值。GetType(){x:Type viewmodels:AllBeadsViewModel} - 那沒有用 - 所以我嘗試了匹配value.GetType()。Name到「AllBeadsViewModel」 - 仍然沒有效果 –
還要記住,元素將覆蓋任何嘗試將其設置爲樣式。除了轉換器之外,你還應該從'Border'元素聲明中去掉'Background =「#3f3f3f」',並在樣式中加入' '。 –