-2
(我使用WPF和MVVM模式)在項目控制自定義按鈕繼承,內容沒有被設置
首先,我從Button控件創建自己的自定義按鈕繼承。這是因爲我想這個按鈕有一些附加屬性:
public class RangeButton : Button
{
public Rank CardARank { get; set; }
public Rank CardBRank { get; set; }
public bool IsSuited { get; set; }
public string ButtonContent { get; set; }
public RangeButton(int i, int j, bool suited)
{
CardARank = GetRankFromInt(i);
CardBRank = GetRankFromInt(j);
IsSuited = suited;
SetButtonContent();
}
public RangeButton()
{
}
private Rank GetRankFromInt(int x)
{
return (Rank) x;
}
private void SetButtonContent()
{
ButtonContent = StaticGameHelpers.GetRangeSegmentString(CardARank, CardBRank, IsSuited);
}
}
我初始化RangeButton的名單在我的視圖模型,每一個它的屬性被設置正確 - 我最終的169個RangeButtons列表:
public List<RangeButton> RangeButtons
{
get { return _rangeButtons; }
set
{
_rangeButtons = value;
OnPropertyChanged("RangeButtons");
}
}
這是我的XAML:正在顯示
<ItemsControl x:Name="itemsControl" ItemsSource="{Binding RangeButtons}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<inheritedControls:RangeButton Width="70" Height="50" Margin="3">
<ContentPresenter Content="{Binding ButtonContent, RelativeSource={RelativeSource Self}}"/>
</inheritedControls:RangeButton>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="13" Rows="13"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
全部169按鈕,但每個按鈕是完全空白,沒有內容。此外,寬度,高度和邊距的特性被忽略,這導致我相信我的xaml存在問題,但我無法弄清楚。
我意識到有這樣一些類似的問題,但沒有一個使用自定義繼承按鈕。任何幫助非常感謝:)
如果您正在初始化視圖模型中的RangeButton列表,那麼它不再是MVVM。根據MVVM,視圖模型不應該意識到視圖。儘管你迫使視圖模型包含一些視圖項目(按鈕)。 – dymanoid
您是否嘗試過使用'ObservableCollection'或'ConcurrentBag'作爲您的列表?這可能是爲什麼它不會令人耳目一新,它綁定到一個簡單的舊List List。只是一個猜測:) –
@dymanoid啊是的,你是對的 - 謝謝你指出。你認爲更好的方法是在我的虛擬機中有一個自定義對象列表,例如列表,它將包含與我的RangeButton相同的屬性 - 然後在我的xaml中使用這個作爲項目源,但是將每個項目重新模板爲按鈕? –
rejy11